问题描述
有没有办法从 2 个 PassThrough Streams 创建一个 Duplex 流? 我尝试构建一个编码和解码管道。一端是 WebSocket Stream,另一端应该是双工流。
目标是创建一个透明的编码/解码流,这似乎是我直接与 WebSocket(双工)流“对话”。 (ws 模块,WebSocket.createWebSocketStream
)
我发现 Duplexer 模块工作正常。但在某些情况下,我在代码的其他地方遇到了一些 ERR_INTERNAL_ASSERTION
错误,这真的很难调试。
出于测试目的,我想尝试没有模块的编码/解码流程。为此,我需要某种方式从 2 个 PassThrough 流创建单个双工流。
----------------------- ENCODE FLOW -------------------------
| [Transform Stream] <- [Transform Stream] <- [PassThrgouh] |
WebSocket Stream < | | > Duplex
| [Transform Stream] -> [Transform Stream] -> [PassThrgouh] |
`---------------------- DECODE FLOW ------------------------´
我用来创建转换管道的代码
stack(stack,upstream,options) {
options = Object.assign({
objectMode: true
},options);
let read = new PassThrough(options);
let write = new PassThrough(options);
let adapter = duplexer(write,read);
// build encode flow
stack.reduce((prev,cur) => {
return prev.pipe(cur.encode);
},write).pipe(upstream);
// build decode flow
stack.reduceRight((prev,cur) => {
return prev.pipe(cur.decode);
},upstream).pipe(read);
return adapter;
};
read
和 write
是上述架构中的两个直通流。
“上游”WebSocket 流。 “Stack”是一个具有 encode
和 decode
属性的对象数组,表示转换流。
感谢您的任何提示/建议。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)