请咨询一下。 客户代码:
var source = new EventSource('/notifications/stream');
source.addEventListener('open', function(e) {
console.log('SSE connected')
}, false);
source.addEventListener('message', function(e) {
alert('yes')
console.log('SSE connected')
}, false);
服务器代码
// set timeout as high as possible
req.socket.setTimeout(Infinity);
// send headers for event-stream connection
// see spec for more information
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive'
});
res.write('\n');
setInterval(function(){
console.log('writing');
res.write("id: " + Date.now() + "\n");
res.write("data: " + '{"message":"hello world"} ' + "\n\n");
}, 1000);
没有任何作用......但如果我在res.end()
客户端触发res.write()
一次后添加alert()
并且服务器崩溃,因为它已经结束了res
。我读到that it might be antivirus's problem我的客户端在连接关闭之前不会触发,因此我关闭了防病毒软件,但它没有帮助。所以我的问题是:
NodeJS版本0.10.28 感谢您的关注。 抱歉英语不好。
答案 0 :(得分:2)
<强>解决强>
问题在于中间件&#34;压缩&#34;我在快递中使用的
由于压缩的性质,此模块不具备服务器发送事件的开箱即用功能。要压缩内容,需要缓冲输出窗口以获得良好的压缩。通常,在使用服务器发送的事件时,需要访问客户端的某些数据块。
您可以通过调用res.flush()来实现此目的,当您需要将所写数据实际发送到客户端时。