Javascript 如何用RxJS编写简单的元流 背景
这是我第一次尝试反应式编程。 我有一个随时接收数据缓冲区的流 当缓冲区以Javascript 如何用RxJS编写简单的元流 背景,javascript,node.js,stream,rxjs,observable,Javascript,Node.js,Stream,Rxjs,Observable,这是我第一次尝试反应式编程。 我有一个随时接收数据缓冲区的流 当缓冲区以02开始时,表示消息的开始;当缓冲区以03结束时,表示消息的结束 例如: - - - 02 53 44 5a - - - 52 6a 72 7a - - - 62 32 62 0d - 0a 03 - - - - > 客观的 我的目标是在每次检测到消息完成时触发一个事件,并将整个消息作为参数 研究 在读了几本书之后,我知道我想创造一个新的世界 通过我的研究,我相信我想要创建一个“元可观察”或“元流”,即,一个可观察
02
开始时,表示消息的开始;当缓冲区以03
结束时,表示消息的结束
例如:
- - - 02 53 44 5a - - - 52 6a 72 7a - - - 62 32 62 0d - 0a 03 - - - - >
客观的
我的目标是在每次检测到消息完成时触发一个事件,并将整个消息作为参数
研究
在读了几本书之后,我知道我想创造一个新的世界
通过我的研究,我相信我想要创建一个“元可观察”或“元流”,即,一个可观察的或流的流(尽管这可能令人困惑…)
我的计划如下:
- 05 34 43 31 - - - 12 23 43 - - 02 53 44 5a - - - 52 6a 72 7a - - - 62 32 62 0d - 0a 03 - - - - >
- - 02 53 44 5a - - - 52 6a 72 7a - - - 62 32 62 0d - 0a 03 - - |
1-为传入的所有缓冲区消息创建一个可观察的
2-订阅步骤1,并创建一个可观察对象,用于检测消息的开头(02
)和结尾(03
)
3-订阅第2步中的内容,以处理数据
因此,我的图表如下所示:
- 05 34 43 31 - - - 12 23 43 - - 02 53 44 5a - - - 52 6a 72 7a - - - 62 32 62 0d - 0a 03 - - - - >
- - 02 53 44 5a - - - 52 6a 72 7a - - - 62 32 62 0d - 0a 03 - - |
问题
1-由于我通过node.js中的套接字接收此数据:
socket = net.createConnection( { host: "localhost", port: 8080}, () => {
socket.on( "data", console.log );
} );
我认为我不能使用rxjs提供的桥接器。我必须使用观测者。创建,对吗
2-即使我解决了问题1,我也不知道如何创建一个流来实现这个效果。有人能举一个代码片段作为例子吗?你的思路是对的。但是,您希望创建一个可观察对象,因此您可能希望
可观察。创建而不是观察者。创建。它非常混乱,因为可观察。create
需要一个包含观察者的函数。然后,该函数可以将项目发送到该观察者
你也渴望认识到你想要一个热的可观察的。然而,Observable.create
无论如何都会给你一个热的可观察性。您仍然希望使用某种发布来避免多个订阅。我们将通过共享来实现这一点。至于缓冲,您可能可以使用buffer
。最后我想会是这样的
- A-使用
observable创建的observable。围绕套接字回调创建
- B-用
- C-flatMapB从缓冲区流转到项目流
- D-观看C,并仅用于在
03
上发射
- E-C使用D作为结束选择器
然后将E公开为服务的公共APIE将在消息到达时发出整个消息
*注意,此方法假设您连续收到消息,因此我们不需要处理02
信号,因为我们知道消息结束后的第一个字节必须是下一条消息的开始。如果不是这样的话,你会希望处理得更好
**您可以在flatMap
之后共享。这将稍微更有效。您不能在缓冲区后共享
***在重读你的问题时,我注意到你想要的是一个流,而不是数组流。要获得此结果,您可以获取缓冲区的输出
,并使用observatable在flatMap
中运行它。这将为您提供冷流的热流