node.js,socket.io只能在本地工作,不能从内网系统访问

我使用node.js和socket.io为实时通知系统,所以我已经testingnode.js和socket.io与简单的聊天代码,它与本地主机相当不错,但不能从另一个系统访问相同本地连接到同一networking,我的服务器和客户端代码如下所示

server.js

 var express = require('express') , app = express() , http = require('http') , server = http.createServer(app) , io = require('socket.io').listen(server); server.listen(8888); 

和客户端html index.html

 <script src="http://localhost:8888/socket.io/socket.io.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> <script> var socket = io.connect('http://localhost:8888'); </script> 

它的工作在我的浏览器与此urlhttp://localhost/schat/index.html但不工作时,我试图连接从另一个系统使用我的IP 192.171.56.23/schat/index.html但所有其他的HTML文件工作好,下面是我的netstat输出

 [root@localhost schat]# netstat -pan | grep 8888 tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 8068/node tcp 0 0 127.0.0.1:8888 127.0.0.1:38273 ESTABLISHED 8068/node tcp 0 0 127.0.0.1:38273 127.0.0.1:8888 ESTABLISHED 7990/firefox 

这是一个来自socket.io文档的工作示例(稍作修改)。

使用<script src="/socket.io/socket.io.js"></script>

而不是<script src="http://localhost:8888/socket.io/socket.io.js"></script>

并使用var socket = io.connect(window.location.origin);

而不是var socket = io.connect('http://localhost:8888');

(socket.io v1.3.5,express v4.12.2)

的index.html

 <script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect(window.location.origin); socket.on('news', function (data) { console.log(data); socket.emit('my other event', { my: 'data' }); }); </script> 

server.js

 var express = require('express'); var app = express(); var http = require('http'); var server = http.createServer(app); var io = require('socket.io').listen(server); server.listen(8888); app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); io.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); 

改变你的客户端代码

  <script> var url = window.location.host; var socket = io.connect(url); </script> 

我有同样的问题,我修好了:

  • 首先,您必须在代码中将 http:// localhost:8888 /更改为http:// your_IP_address:8888 / everywhere。

  • 其次,花了我太多的时间来修复是改变server.listen(8888);server.listen(8888,“你的IP地址”) ;