【发布时间】:2020-08-22 13:33:14
【问题描述】:
我正在尝试将一个非常简单的节点服务器部署到 heroku,如下所示:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
console.log("Server started")
wss.on('connection', function connection(ws) {
console.log('Client connected');
setInterval(() => {
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
var testObject = {
message: new Date().toTimeString()
}
client.send(JSON.stringify(testObject));
}
});
}, 5000);
ws.on('close', () => console.log('Client disconnected'));
});
包.json
"engines": {
"node": "12.x"
},
"scripts": {
"server": "node server.js"
},
如果我在本地启动它,我的客户会打印出时间戳。 我现在将它部署到heroku。日志显示:
2020-05-07T09:30:30.429508+00:00 app[web.1]: > websocket-node@1.0.0 开始 /app 2020-05-07T09:30:30.429509+00:00 app[web.1]: > 节点 server.js 2020-05-07T09:30:30.512985+00:00 app[web.1]:服务器已启动
然后我更改我的客户端配置
// const subject = webSocket('ws://localhost:8080');
const subject = webSocket('ws://whateverwhatever.herokuapp.com:8080');
但我没有收到来自服务器的答复。我错过了什么?
【问题讨论】:
-
您需要绑定到
process.env.PORT,而不是8080。 Heroku 为您提供了一个需要绑定的随机端口。其次,ws URL 末尾不包含端口号。由DNS自动翻译成ip地址+端口。