我有一个带有几个长管道和几个变换的程序。
例如
socket.pipe(ta).pipe(tb).pipe(tc);
...
tc.pipe(other_socket);
向/从管道添加/读取元数据的最佳方式是什么?
例如:ta
将数据包累积并分解为行。 tb
需要根据原始 IP 地址(如果有)为每一行添加数据前缀。
如何从它的输入中tb
获取?remoteAddress
这里似乎与原型继承有一些相似之处。即tb
应该问ta
(哪个没有属性)然后ta
应该问socket
(哪个有属性)。
我正在寻找一种从管道添加和读取元数据的通用方法,因为我还有其他更复杂但类似的问题。
我目前正在通过使用由具有meta
和payload
属性的对象组成的“对象流”来解决这个问题。每个转换都必须完成它的工作,payload
并且大多数都不要meta
理会。这个解决方案很难看,特别是因为我必须创建一个xnet
看起来像net
但产生这些增强对象的新模块,而不是普通的缓冲区或字符串。
(Haskellers 可能将此解决方案视为 Monad,我将我使用的大部分流转换提升为“元”Monad。我仍在学习 Haskell,因此这种观察可能不正确。)