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地址”) ;