Socket.io 适用于 localhost,但不适用于 Heroku 服务器

2024-04-10

我目前正在尝试使用socket.io 和node.js 服务器与Unity 脚本进行通信。我已将所有内容连接起来并与 localhost 一起使用,但由于某种原因,当我将其移植到 Heroku 服务器时,它无法连接。我假设它可能与 URL 有关?我是 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如果是的话not设置,默认为 5000。

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

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

heroku run printenv

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

PORT=9352

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Socket.io 适用于 localhost,但不适用于 Heroku 服务器 的相关文章

随机推荐