2

在 Node 中,创建事件架构非常容易。但是,如果我有一个我无法控制的流 API(通过 socket.io)的客户端,并且我的客户端需要根据不同的事件序列做出不同的反应,该怎么办。
2 个不同序列的示例:

  • 第一个订单 > 第二个订单
  • 第一个下单 > 第一个被交易击中的订单 > 第二个下单

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

谢谢

4

1 回答 1

1

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

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.
));
于 2013-07-17T15:33:39.583 回答