【发布时间】:2019-02-27 14:55:58
【问题描述】:
我用 NodeJS 和 SocketIO 开发了聊天程序。然后我部署到 Heroku Server,发现 SocketIO 在 Heroku 中不起作用。
我已经检查了 Heroku 的日志,但是什么也没有。但奇怪的是它在 localhost 中工作,而不是在 Heroku 环境中。我认为端口设置有问题。
[服务器端代码]
/* Socket IO Settings */
const server = require('http').Server(express);
const io = require('socket.io')(server);
let port = process.env.PORT || 3001;
server.listen(port, function () {
console.log(`SocketIO Listening on port : ${port}`)
});
[客户端代码]
/* Chat Functions */
var socket = io.connect(`${window.location.hostname}:3001`);
第一次我只使用var socket = io.connect('http://localhost:3001'); 代码,它在Localhost Env 中运行良好。但是在我部署到 heroku 之后,我添加了 Heroku 变量以在生产中使用它。
[端口设置]
NODEJS Server : 3000
SOCKET IO : 3001
Heroku process.env.PORT : 3001 (But When I check Heroku console it changes everytime when I reload the dynos and in Logs said me that the ports are already in use.)
我已经阅读了 Heroku 文档,但似乎我使用 Express Generator 创建了 NodeJS 应用程序,我认为它应该是不同的解决方案。我已经尝试过 heroku 文档,但它不起作用
【问题讨论】:
-
get port number of stream server on client side [running on heroku] 的可能重复您的问题是您的 heroku dyno 没有暴露在端口 3001 上,而是在内部在某个随机端口上,在外部在端口 80 上。这个线程应该让您到达您需要的地方去吧。
标签: javascript node.js express heroku socket.io