Socket.io代码在本地工作,不在服务器上运行

时间:2016-08-25 19:44:29

标签: node.js express socket.io

我的小游戏服务器在本地运行时工作正常,但当我把它放在我的linode上时,我会收到错误。

完整来源:https://github.com/raimondi1337/null-terminus

相关服务器代码:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

var clients = {};

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

http.listen(3000, function(){
  console.log('listening on *:3000');
});

相关客户代码:

<body>
<script src="/socket.io/socket.io.js"></script>
<h3 id="#player"></h3>
<canvas id="canvas" width="750" height="500"></canvas>
<script>var socket = io();

按原样运行,我得到:

GET http://staging.dustinraimondi.com/socket.io/socket.io.js 
(index):8 Uncaught ReferenceError: io is not defined

如果我将socket.io脚本标记更改为最新的socket.io CDN,我得到:socket.io-1.4.5.js:1 GET http://staging.dustinraimondi.com/socket.io/?EIO=3&transport=polling&t=LR3DCHp 404 (Not Found)

如果我按照Socket.IO only works locallyio();更改为io.connect(23.239.8.165:3000);,则io仍然未定义且“获取”#39}失败。如果我使用&#39; io.connect();&#39;同样如果我指定我的服务器IP并使用socket.io CDN。

我在这里不理解什么网络概念?

编辑:Socket.io通过NPM安装在服务器上,服务器正在运行。

2 个答案:

答案 0 :(得分:0)

您的服务器似乎不允许连接到端口3000.验证您的防火墙是否允许通过此端口进行tcp流量。要调用io脚本,您必须调用http://staging.dustinraimondi.com:3000/soket.io/?EIO=3&transport=polling&t=LR3DCHp

Nginx正在端口80上运行,因此,当你请求staging.dustinraimondi.com时,你正在向端口80发送请求。如果你没有使用nginx,你可以关闭nginx并设置你的nodejs应用程序来监听在端口80而不是端口3000上。

另一种选择是配置nginx(我不是nginx专家)将请求转发到子域到端口3000.因此,您可以创建一个子域,如io.dustinraimondi.com,当您请求任何nodejs项目时服务nginx可以将请求转发给localport 3000。

答案 1 :(得分:0)

问题不是我的代码,而是我的nginx服务器配置。必须将此块添加到此子域的nginx配置中:

location /socket.io/ {
    proxy_pass http://localhost:3000;       
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $host;
}

来源:Socket.io with nginx