1

私はリアルタイム通知システムに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);

およびクライアントhtmlindex.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>

このURLを使用してブラウザで動作していますが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

4 に答える 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');

(socket.io v1.3.5、エクスプレス 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>

サーバー.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);
  });
});
于 2015-03-13T14:54:38.677 に答える
0

私は同じ問題を抱えていて、それを修正しました:

  • まず、コード内のすべての場所でhttp://localhost:8888/http://your_IP_address:8888/に変更する必要があります。

  • 次に、 server.listen(8888);を変更するのに時間がかかりすぎました。server.listen(8888 , "あなたのIPアドレス") ;

于 2015-11-26T17:37:38.343 に答える