node.js中,仅socket.io工作的地方,无法从内部网络系统访问
我使用Node.js和受socket.io的实时通知系统,所以我已经测试的Node.js和简单的聊天代码socket.io,它几乎与本地主机好,但不能从其他系统访问相同的这与同一网络本地连接,我的服务器和客户端的代码看起来像下面
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=".6.4/jquery.min.js"></script>
<script>
var socket = io.connect('http://localhost:8888');
</script>
它的工作在我的浏览器这个网址http://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 docs一个工作示例(略有修改)。
使用<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');
(Sotsket.yo v1.z.5,快速vch.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);
});
});