Как правильно построить фрейм-декодер TCP в nodejs

Я пытаюсь найти простой, модульный и идиоматический способ анализа текстового протокола для потоков TCP.

Скажем, протокол выглядит так:"[begin][length][blah][blah]...[blah][end][begin]...[end][begin]...[end]"

Я хотел бы правильно использовать потоки (Transform?) Для создания небольшого компонента, который просто извлекает отдельные сообщения (начинается с [begin] и заканчивается [end]). Разбор структур данных более высокого уровня оставлен другим компонентам.

Я не так сильно беспокоюсь о производительности сейчас, так что я просто хотел бы использовать простое регулярное выражение (этот протокол можно анализировать с регулярным выражением).

У меня проблемы с парой понятий:

  1. Поскольку в буфере может не содержаться полное сообщение, как правильно обработать состояние и оставить частичное сообщение в покое, чтобы его можно было проанализировать, когда поступит больше данных? Должен ли я хранить свой собственный буфер или есть способ "вернуть" данные, которые я не использовал?
  2. Поскольку новые данные могут содержать несколько сообщений, может ли Transform поток обрабатывать несколько сообщений (как я звоню this.push(data); многократно)?

(обратите внимание, что я пытаюсь построить этот декодер кадров вне логики соединения с сокетом... Я думаю, что это будет класс, который расширяет stream.Transform и реализовать read метод)

0 ответов

Другие вопросы по тегам