在一端我有一个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 });
我最终向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