node.js,socket.io只在本地工作,无法从Intranet系统访问

时间:2015-03-12 06:07:17

标签: node.js socket.io centos7

我正在使用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        

4 个答案:

答案 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)

我遇到了同样的问题,我修好了它:

答案 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的官方文档,我什么都看不到!