node.js中的SSE直到res.end()才会触发“消息侦听器”.原因在代码中或
SSE in node.js doesn't fire "message listener" until res.end(). Reason is in code or
>请提供一些建议。客户端代码:
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);
什么都没用...但是如果我在客户端触发alert()
一次并且服务器崩溃后添加res.end()
res.write()
因为它已经结束了res
.我读到可能是防病毒的问题,我的客户端在连接关闭之前不会触发,所以我关闭了防病毒软件,但它没有帮助。所以我的问题是:
- 是代码问题还是其他原因(防病毒(
- 如果它来自防病毒软件,是针对客户端防病毒还是服务器的防病毒问题?(我正在使用Nod32防病毒软件在Windows上开发,如果我在Linux上部署,它会有所帮助还是取决于客户端的防病毒软件(
- 除了 websocket 之外还有其他选择吗(我唯一需要的是以最小的内存使用量推送通知(
NodeJS 版本 0.10.28感谢您的关注。对不起,英语不好。
已解决
问题出在我在 express 中使用的中间件"压缩">
由于压缩的性质,此模块不能与服务器发送的事件一起开箱即用。要压缩内容,需要缓冲输出窗口以获得良好的压缩效果。通常,在使用服务器发送的事件时,需要到达客户端的某些数据块。
您可以通过调用 res.flush(( 来实现这一点,当你需要写入数据以实际将其提供给客户端时。
相关文章:
- Highslide(iframe的侦听器)
- 如何在for循环中添加事件侦听器
- 选项卡侦听器未被来自后台脚本的消息激活
- 未命中服务器发送的事件侦听器
- 如何覆盖原型中的事件侦听器
- 加载侦听器上的函数触发得太早
- 无法将事件侦听器附加到画布
- 如何在d3.js中自定义事件侦听器
- 在es6中,将带有回调的事件侦听器设置为可迭代的
- 如何在chrome扩展中检索活动选项卡、后台消息侦听器内部
- node.js中的SSE直到res.end()才会触发“消息侦听器”.原因在代码中或
- 为什么在定义回调/侦听器函数(异步消息传递,port.on)后没有立即设置全局变量
- 在 JavaScript 上添加/删除侦听器(垃圾收集器)
- 添加侦听器以向文本字段创建警告消息
- 如何从页面脚本创建自定义消息的事件侦听器
- 从backbone.js中的javascript事件侦听器获取此消息
- 向事件发射器侦听器发送任意数量的参数
- JavaScript 侦听 YouTube HTML5 播放器中的 URL 更改
- Node.JS调试器监听5858端口
- Cloud9-调试器监听端口15454