在 Node 中,创建事件架构非常容易。但是,如果我有一个我无法控制的流 API(通过 socket.io)的客户端,并且我的客户端需要根据不同的事件序列做出不同的反应,该怎么办。
2 个不同序列的示例:
- 第一个订单 > 第二个订单
- 第一个下单 > 第一个被交易击中的订单 > 第二个下单
到目前为止,我正在使用 Transform Streams,我正在考虑创建复杂的自定义逻辑,在需要时缓冲所需的消息并对其采取行动,但我想知道是否有最佳实践来处理这种情况。
谢谢
在 Node 中,创建事件架构非常容易。但是,如果我有一个我无法控制的流 API(通过 socket.io)的客户端,并且我的客户端需要根据不同的事件序列做出不同的反应,该怎么办。
2 个不同序列的示例:
到目前为止,我正在使用 Transform Streams,我正在考虑创建复杂的自定义逻辑,在需要时缓冲所需的消息并对其采取行动,但我想知道是否有最佳实践来处理这种情况。
谢谢
这个想法是定义一组对象来定义你的事件序列,当你得到第一个匹配的事件时,你复制那个序列,然后弹出数组的元素,直到你没有更多的元素。如果遇到不匹配的事件,则重置当前缓冲区。
var events = [
{ sequence : ['event 1', 'event 2', 'event4']
handler: firstSequenceHandler
},
{ sequence : ['event 3', 'event 2']
handler: secondSequenceHandler
}
];
订阅您的事件流:
var eventbuffer;
var handler;
on('data', function(event){
if(eventbuffer){ // we already have started a sequence:
var expectedEvent = eventbuffer.pop(); // get the next expected event
if(expectedEvent === event && eventbuffer.length===0)
return handler();
else{
// reset buffer:
eventbuffer = null;
handler = null;
}
}
// check if the event is in your list of events as the first item.
// if so
eventbuffer = event.sequence.slice(0); // copy the sequence.
handler = event.handler;
eventbuffer.pop(); // remove the first element as you found it.
));