基于Node中的事件序列来控制stream程是否有很好的模式?

在Node中创build一个平衡的体系结构非常简单。 但是如果我有一个客户端streamAPI(通过socket.io),我不能控制,我的客户端需要根据不同的事件序列作出不同的反应。
2个不同序列的例子:

  • 第一次下单>第二下单
  • 第一笔订单>交易的第一笔订单>第二笔订单

到目前为止,我正在使用Transform Streams,并且正在考虑创build复杂的自定义逻辑,以便在需要时对其进行缓冲,但是我想知道是否有最佳实践来处理这种情况。

谢谢

这个想法是定义一组定义你的事件序列的对象,当你得到匹配的第一个事件时,你复制该序列,然后popup数组的元素,直到你没有更多的元素。 如果遇到不匹配的事件,则重置当前的缓冲区。

var events = [ { sequence : ['event 1', 'event 2', 'event4'] handler: firstSequenceHandler }, { sequence : ['event 3', 'event 2'] handler: secondSequenceHandler } ]; 

订阅您的活动stream:

 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. ));