一方面我有一个http请求(长轮询)。另一端是“游戏服务器”调度事件。这些端部在对象模式下与双工非流动流绑在一起,该部分工作正常。
长轮询结束侦听readable
并通过反复调用stream.read
来消耗流。然后关闭客户端的连接。
游戏服务器使用stream.write
将事件推送到客户端。
游戏中的一些事件实际上是几个事件,这就是问题所在:
当游戏服务器一次添加多个事件(重复调用stream.write
)时,第一次写入触发readable
,并且长轮询将填充事件并关闭。这非常不方便。
问题的关键在于我不能沉默readable
然后在我完成写作时触发它。
所以我的问题是;我可以以某种方式“暂停”流并在之后恢复吗?
是否有另一种解决这个问题的方法?
我最好的选择是编写一系列事件,但我认为这是一个反模式。
以下是一些代码来说明我的问题:
var stream = require('stream');
var connection = stream.PassThrough({ objectMode: true });
var exhaust = function() {
console.log('exhausting');
var chunk;
while ((chunk = connection.read()) !== null)
console.log(chunk);
console.log('exhausting end');
}
connection.on('readable', function(){
console.log('Ready to read');
exhaust();
});
for (var i = 0;i < 10;i++)
connection.write({ test: true });
答案 0 :(得分:0)
我最终向write
写了一系列事件,但我很期待这个即将推出的功能,这可能是missin解决方案:
http://strongloop.com/strongblog/performance-node-js-v-0-12-whats-new/ http://nodejs.org/docs/v0.11.10/api/stream.html#stream_writable_cork