3

我试图找到一种简单、模块化和惯用的方式来解析基于文本的 TCP 流协议。

假设协议如下所示: "[begin][length][blah][blah]...[blah][end][begin]...[end][begin]...[end]"

我想正确使用流(转换?)来构建一个只提取单个消息的小组件(以 [begin] 开头并以 [end] 结尾)。解析到更高级别的数据结构留给其他组件。

我现在也不太关心性能,所以我只想使用一个简单的正则表达式(这个协议可以用正则表达式解析)。

我在几个概念上遇到了麻烦:

  1. 由于缓冲区可能没有完整的消息,我如何正确处理状态并保留部分消息,以便在更多数据进入时进行解析?我必须保留自己的缓冲区还是有办法“放回”我没有使用的数据?
  2. 由于新数据可能包含多条消息,Transform流可以处理多条消息(比如我是否this.push(data);多次调用)?

(请注意,我正在尝试在套接字连接逻辑之外构建此帧解码器......我想它将是一个扩展stream.Transform和实现该read方法的类)

4

0 回答 0