我目前正在尝试使用socket.io和node.js服务器与Unity脚本进行通信。我已经将所有内容连接起来并与localhost一起工作,但由于某种原因,当我将其移植到Heroku服务器时,它无法连接。我猜想这可能与URL有关?我是www.example.com的新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
6条答案
按热度按时间jw5wzhpr1#
几乎可以肯定,问题是端口号不正确。
在您的应用程序中,您正在检查
process.env.PORT
,如果它未设置,则默认为5000。然而,在您的ws URL中,您似乎总是希望您的应用程序侦听端口5000。
通过在项目的根目录中运行以下命令,可以检查应用程序的配置设置:
heroku run printenv
个这将打印一个配置变量列表,包括当前设置的
PORT
值,例如:PORT=9352
您应该在构建ws URL时使用此端口,例如:
zbsbpyhn2#
我找到了路!!
如果您在本地主机中运行服务器,则url应该包含“:端口”示例(端口= 5000)
但是如果已经部署到heroku**则必须删除该url“:端口”
这是我的工作!
6g8kf2rb3#
我已经部署了您的代码与小的变化和它的工作正常的heroku请看看它。服务器端应用程序.js
软件包.json
索引.html
请注意,将index.html和socket.io.js保存在views文件夹中。我部署它的URL是socketip
hpcdzsge4#
好的,出于某种原因,我在这个问题线程上尝试了所有的方法,结果都成功了。但是不是一个单一的答案有效,而是每一个答案的组合。
首先,我删除了URL中的**:PORT**部分,有点像Chinnawat Sirima说的。现在...
www.example.comherokuapp.com/socket.io/?EIO=4&transport=websocket
然后,由于某种原因,用dangalg的answer/teyou的repo中的代码启动服务器确实起作用了(我还注意到teyou的url也没有端口)。
为什么我说“出于某种原因”?因为我仍然不知道我做了什么,哈哈。我猜我是在以一种Heroku不喜欢的方式设置服务器,但每天的localhost都喜欢。因为localhost不在乎。
我只是重新编译这个,因为我已经在这个问题上沮丧了8个小时,或多或少。所以我希望这能帮助其他人,不要失去宝贵的时间和睡眠。
(btw,我的Heroku中没有PORT变量,我有一些其他的名字,我想这是另一个无用的行,但是我不再碰它了,以防我再次破坏它:D)。
s8vozzvw5#
如果您已经将应用程序部署到Heroku,请从给定的服务器URL中删除端口号,它应该可以正常工作。**
ws://<heroku app name>.herokuapp.com/socket.io/?EIO=4&transport=websocket
当您在本地测试应用程序时,您可以通过http://localhost:YOUR_PORT_NUMBER
**访问套接字,在部署后,您不需要指定端口。r3i60tvu6#
我 做 了 一 个 噩梦 。 最 后 看 完 了 所有 的 文件 。
服务 器 : https://www.npmjs.com/package/socket.io 客户 端 :https://socket.io/docs/v4/client-initialization 格式
看 起来 我 的 结构 是 错误 的 。
中 的 每 一 个
我 的 完整 代码 。
格式
在 我 的 react 代码 中 , 我 只是 使用 。
格式
希望 这 对 其他 人 有 帮助