为啥我的应用无法在 Heroku 上建立 websocket 连接?

Posted

技术标签:

【中文标题】为啥我的应用无法在 Heroku 上建立 websocket 连接?【英文标题】:Why won't my app establish websocket connection on Heroku?为什么我的应用无法在 Heroku 上建立 websocket 连接? 【发布时间】:2013-11-14 07:35:10 【问题描述】:

我正在尝试在 heroku 上部署我的 nodejs 应用程序。我无法建立 websocket 连接。我已经阅读了我能找到的所有内容,尝试了每个示例,但似乎没有一个对我有用。

当我尝试打开我的页面“heroku open”时,nodejs 正确地给了我 html 文件。但是,websocket 'ws' 连接永远不会建立。

我的 server.js 有这些配置:

var pport = process.env.PORT || 5000;
server.listen(pport, function(err) 
    if(!err)  console.log("Listening on port " + pport); 
);

旁注 当我检查“heroku 日志”时,我发现我的应用程序运行的端口是一个随机的 5 位数字。 (如 28896、53365 等)它实际上从未在下半场运行 || 5000。

但问题是,为了让我的 game.html 文件建立 websocket 连接,它需要知道什么端口。 我尝试了以下客户端配置,均未奏效:

1)

var host = location.origin.replace(/^http/, 'ws');
this.connection = new WebSocket(host);

2)

var host = location.origin.replace(/^http/, 'ws');
host = host + ":5000";
this.connection = new WebSocket(host);

3)

this.connection = new WebSocket('ws://infinite-earth-7708.herokuapp.com/');

我也做了他们网站所说的,并在部署我的应用程序后尝试使用以下内容:

heroku config:add NODE_ENV=production

请指教

【问题讨论】:

【参考方案1】:

嗯,我想通了。以下是你应该知道的:

我没有更改原始帖子中的服务器配置。

我的客户端配置如下所示:

var host = location.origin.replace(/^http/, 'ws');
this.connection = new WebSocket(host);

但这是踢球者。 在终端上我使用了以下命令:

heroku labs:enable websockets

瞧,它有效!我希望这对某人有所帮助。

【讨论】:

有关实现 websockets 的更多信息,请查看 Heroku websockets 文档: devcenter.heroku.com/articles/node-websockets 非常感谢。我一直在寻找这个,这很有效.. Heroku 更新了他们的堆栈。您不再需要手动启用 websockets。这个答案现在已经过时了。 @andrevenancio 还有,除草 wss 或 ws 就够了吗?

以上是关于为啥我的应用无法在 Heroku 上建立 websocket 连接?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 socket.io 视频聊天无法在 heroku 上运行?

如何将react-native-web应用程序部署到heroku?

为啥当我的 heroku 应用程序崩溃时出现 mongodb 错误? (在本地工作就好了!)

为啥 Heroku 无法检测到 Node.js buildpack?

Web进程无法绑定$ port节点

为啥我的 sidekiq 计划的 cron 作业没有在 heroku 上运行?