SSE在Heroku

时间:2015-08-10 11:20:36

标签: javascript node.js heroku server-sent-events

这是我第一次使用服务器已发送事件,可能我做错了...我只是按照一些指南进行代码实验,本地一切似乎都是工作得很好。

不幸的是,当我在 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上它不是。

1 个答案:

答案 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);

现在我不知道这是否正确,但现在它正在发挥作用。