暂停非流动流(延迟可读事件)



在一端我有一个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

相关内容

  • 没有找到相关文章