我正在使用node.js和socket.io作为实时通知系统,所以我用简单的聊天代码测试了node.js和socket.io,它与localhost相当不错,但无法访问从本地连接到同一网络的另一个系统,我的服务器和客户端代码如下所示
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>
它使用此网址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
答案 0 :(得分:1)
以下是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');
(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);
});
});
答案 1 :(得分:0)
将客户端代码更改为
<script>
var url = window.location.host;
var socket = io.connect(url);
</script>
答案 2 :(得分:0)
我遇到了同样的问题,我修好了它:
首先,您必须在代码中的任何位置将http://localhost:8888/更改为http://your_IP_address:8888/。
其次,花了我太多时间修复是将 server.listen(8888); 更改为 server.listen(8888,“您的IP地址”)< /强>
答案 3 :(得分:0)
感谢Karim,您的解决方案对我有用,在“ server.js”配置中,我设置了“端口”值和“服务器”,但没有设置ip,我仅使用不带“ https://”的名称,就像这样:
// External route.
var express = require("express");
var router = express.Router();
// In cloud 9 use port 8081
const port = 8081;
const webLnk = 'mywebdevaddress.io';
// In dev local ambient 'localhost' work without the 'port' and the server, in prod internet // you need to specify the port and the link name.
const server = require('http').Server(router).listen(port, webLnk);
const io = require('socket.io')(server);
是socket.io的官方文档,我什么都看不到!