1

私はnode.jsとsocket.ioが初めてで、http://socket.io/#how-to-useの例でサーバーをクライアントに接続しようとしました。(ローカルホストなし)

サーバ:

    var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app)
  , fs = require('fs')

app.listen(80);

function handler (req, res) {
  fs.readFile(__dirname + '/index.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html'+err);
    }

    res.writeHead(200);
    res.end(data);
  });
}

io.sockets.on('connection', function (socket) {
    socket.on('message', function(msg){
        console.log('Got text: '+msg);
        socket.broadcast.send(msg);
    });
    socket.on('disconnect', function () { });
});

クライアント:

<html><head><script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect();
  socket.on('connect', function () {
    alert('connected.');

    socket.on('message', function (msg) {
      // my msg
      alert('message received: '+msg);
    });
    socket.send('hi');

  });


</script>
</head><body>This is the content :)</body>
</html>

Google Chrome のコンソールに次のように表示されます。

Unexpected response code: 502

また、すべてのメッセージを受信した後、Chrome は追加します

GET http://[myServer]/socket.io/1/?t=1352313105809  socket.io.js:1659
Socket.handshake socket.io.js:1659
Socket.connect socket.io.js:1699
maybeReconnect

コンソールに。問題はどこですか?

4

1 に答える 1

4

ハウツー ページの例はすべて、Web サイトの提供に一般的なポート 80 を使用しています。

ただし、例ではポート 8080 を使用します。

socket.io スクリプトがロードされているかどうか、Web ブラウザーのコンソールを確認してください。http://localhost:8080/socket.io/socket.io.js明示的な URL として提供し、接続する必要がある場合がありますio.connect('http://localhost:8080');

上記が機能しない場合は、Web サーバーが実行されているポートに関する洞察を共有してください。


(更新された)例では、サーバー側で受信メッセージを実際に処理するコードはありません。

`socket.on('message', function(msg){
  console.log('Got text: '+msg);
  socket.send(msg);
});

少なくともメッセージをクライアントに送り返す必要があります。アラートは、クライアントがメッセージを受信したときにのみトリガーされます。node.js コンソールは受信メッセージまたは送信メッセージを出力しますか? 接続すると、node.js コンソールの数行が次のようになります。

debug - client authorized
info  - handshake authorized ...
debug - setting request GET /socket.io/1/...
debug - set heartbeat interval for client ...
debug - client authorized for
debug - websocket writing 1::
debug - sending data ack packet
于 2012-11-04T19:57:29.733 に答える