在Node中,创建一个公平的架构非常容易。但是如果我有一个我无法控制的流API(通过socket.io)的客户端,我的客户需要根据不同的事件序列做出不同的反应。如果 2个不同序列的例子:
到目前为止,我正在使用Transform Streams,我正在考虑创建复杂的自定义逻辑,在需要时对所需的消息进行缓冲并对其进行操作,但我想知道是否有最佳实践来处理这种情况
由于
答案 0 :(得分: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.
));