node.js中,仅socket.io工作的地方,无法从内部网络系统访问

问题描述 投票:1回答:4

我使用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="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        
node.js socket.io centos7
4个回答
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');

(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);
  });
});

0
投票

更改您的客户端代码

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

0
投票

我有同样的问题,我固定它:


0
投票

感谢卡里姆,你对我的解决方案的工作,在“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文档我没有看到任何这!

© www.soinside.com 2019 - 2024. All rights reserved.