这是我第一次使用服务器已发送事件,可能我做错了...我只是按照一些指南进行代码实验,本地一切似乎都是工作得很好。
不幸的是,当我在 Heroku 上传应用时,它并没有按预期工作。
Javascript看起来像这样:
// SSE Start
// Check if SSE is supported
if (!!window.EventSource) {
var source = new EventSource('/live/redis');
} else {
console.log('SSE not supported');
}
source.addEventListener('open', function (e) {
console.log('Connection Open');
}, false);
我使用 NodeJS 和 Redis 从API获取实时消息,但这并不重要...
当 SSE 连接打开时,我只需在浏览器上打印一个日志。
我现在没有做任何其他事情,如果我在本地打开我的应用程序,它工作正常,我会收到console.log
消息。
如果我在Heroku上推送项目,我就不会收到任何打开的连接消息。
我无法理解为什么,可能缺少某些东西或者我需要配置Heroku以支持SSE?
如果我使用命令heroku local
打开项目,它也能正常工作......
修改
从Heroku日志中我收到了:
app/web.1: GET /live/redis 500 86.403 ms - -
我无法理解为什么,在本地它工作正常,在Heroku上它不是。
答案 0 :(得分:1)
错误发生在我的Node.js控制器上,该路由/live/redis
以此行开头:
// let request last as long as possible
req.socket.setTimeout(Infinite);
用下面的行改变它解决了我的问题:
// let request last as long as possible
req.socket.setTimeout(0x7FFFFFFF);
现在我不知道这是否正确,但现在它正在发挥作用。