我目前正在尝试使用 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/