Socket.io使用本地主机而不是在Heroku服务器上

我目前正在尝试使用socket.io和node.js服务器与Unity脚本进行通信。 我有一切与本地主机挂钩,但由于某种原因,当我将它移植到我的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')); }); 

我的连接url:

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

问题几乎肯定是一个不正确的端口号。

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

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

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

heroku run printenv

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

PORT=9352

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

WS://your-app.herokuapp.com:9352 / socket.io / EIO = 4&运输= WebSocket的

我已经部署了你的代码,只需稍作修改,并且在heroku上的工作正常,请看看它。 服务器端app.js

 var express = require('express'); var app = express(); app.set('port', (process.env.PORT || 5000)); var server = app.listen(app.get('port'), function() { console.log('Node app is running on port', app.get('port')); }); var io = require('socket.io')(server); app.use(express.static("./views")); app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "X-Requested-With"); next(); }); app.get('/', function (req, res) { var path = __dirname + '/views/index.html'; console.log(path); res.sendFile(path); }); io.on('connection', function(socket) { socket.on('beep', function(){ socket.emit("beep", {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); }); }); 

的package.json

 { "name": "socketio", "version": "1.0.0", "description": "", "main": "app.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start" : "node app.js" }, "author": "inampaki", "license": "ISC", "dependencies": { "express": "^4.13.3", "express-ws": "^0.2.6", "socket.io": "^1.3.7" } } 

的index.html

 <script src="/socket.io.js"></script> <script> var socket = io.connect('/'); socket.on('speed', function (data) { console.log('speed Message Received!'); console.log(data); }); socket.on('beep', function (data) { console.log('beep Message Received!'); console.log(data); }); socket.emit("beep", {beep : true}); socket.emit("change-speed", {"change-speed" : true}); socket.emit("ios-connection", {"ios-connection" : true}); </script> 

注意在视图文件夹中保存index.html和socket.io.js。 我部署它的URL是socketip

让我告诉你我做了什么解决scheme。 我使用这个项目: https : //github.com/teyou/Unity_POC_Socket ,与Heroku一起工作并将套接字io代码更改为我的代码,它的工作原理…所以你可以这样做,或检查是什么使这个项目的工作。