Как правильно построить фрейм-декодер TCP в nodejs
Я пытаюсь найти простой, модульный и идиоматический способ анализа текстового протокола для потоков TCP.
Скажем, протокол выглядит так:"[begin][length][blah][blah]...[blah][end][begin]...[end][begin]...[end]"
Я хотел бы правильно использовать потоки (Transform?) Для создания небольшого компонента, который просто извлекает отдельные сообщения (начинается с [begin] и заканчивается [end]). Разбор структур данных более высокого уровня оставлен другим компонентам.
Я не так сильно беспокоюсь о производительности сейчас, так что я просто хотел бы использовать простое регулярное выражение (этот протокол можно анализировать с регулярным выражением).
У меня проблемы с парой понятий:
- Поскольку в буфере может не содержаться полное сообщение, как правильно обработать состояние и оставить частичное сообщение в покое, чтобы его можно было проанализировать, когда поступит больше данных? Должен ли я хранить свой собственный буфер или есть способ "вернуть" данные, которые я не использовал?
- Поскольку новые данные могут содержать несколько сообщений, может ли
Transform
поток обрабатывать несколько сообщений (как я звонюthis.push(data);
многократно)?
(обратите внимание, что я пытаюсь построить этот декодер кадров вне логики соединения с сокетом... Я думаю, что это будет класс, который расширяет stream.Transform
и реализовать read
метод)