node.js - Socket.io 适用于 localhost 但不适用于 Heroku 服务器

标签 node.js sockets heroku socket.io

我目前正在尝试使用 socket.io 和 node.js 服务器与 Unity 脚本进行通信。我已将所有东西连接起来并使用本地主机,但由于某种原因,当我将它移植到我的 Heroku 服务器时,它无法连接。我假设它可能与网址有关?我是 socket.io 的新手,所以我们将不胜感激。

我的 node.js 服务器:

var express = require('express');
var app = express();
var expressWs = require('express-ws')(app);
var path = require('path');

var server = require('http').createServer(app);
var io = require('socket.io')(server);

io.on('connection', function(socket) {
    socket.on('beep', function(){
        socket.emit("speed", {data: 5});
        console.log('beep recieved');
    });

    socket.on('change-speed', function(data) {
        console.log('change speed recieved: ' + data);
        socket.emit("speed", {newSpeed: data});
    });

    socket.on('ios-connection', function(data) {
        console.log('ios connection with message: ' + data);
    });

});

app.set('port', (process.env.PORT || 5000));

app.listen(app.get('port'), function() {
    console.log('Node app is running on port', app.get('port'));
});

我的连接网址:

ws://<heroku app name>.herokuapp.com:5000/socket.io/?EIO=4&transport=websocket

最佳答案

问题几乎可以肯定是端口号不正确。

在您的应用程序中,您正在检查 process.env.PORT,如果它设置,则默认为 5000。

然而,在您的 ws URL 中,您似乎总是期望您的应用程序在端口 5000 上监听。

您可以通过在项目的根目录中运行以下命令来检查应用程序的配置设置:

heroku 运行 printenv

这将打印配置变量列表,包括当前设置的 PORT 值,例如:

PORT=9352

构建 ws URL 时应使用此端口,例如:

ws://your-app.herokuapp.com:9352/socket.io/?EIO=4&transport=websocket

关于node.js - Socket.io 适用于 localhost 但不适用于 Heroku 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34498819/

相关文章:

Eclipse 无法识别express/node

javascript - 带有nodejs的cordova中的端口问题

javascript - 从 Electron 子进程访问 DOM 树

javascript - 无法将 undefined 或 null 转换为 Function.keys 处的对象

c - 套接字编程 - listen() 和 accept() 有什么区别?

c++ - 在 Windows 上设置从套接字接收的超时

c# - Localhost 在 Windows 上的表现更好吗?

Javascript 未在 Heroku 上的 Django 应用程序中呈现

ssl - 如何在 Heroku 上部署安全的 (HTTPS) Meteor 应用程序?

django - 无法在heroku上启动gunicorn(Django Node应用程序)错误: Connection in use: ('0.0.0.0' , 46831)