0

socket.io を使用すると、フォームの投稿時にクライアントがハングアップします (ページが読み込まれ続けます)。ノード サーバーを停止すると、クライアントはすぐに正常に動作します。

サーバ

app.post('/', function(req, res) {
  io.sockets.emit('messages', { 
    user: req.body.user,
    message: req.body.message
  });
});

クライアント

<script src="socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:3000');
socket.on('messages', function (data) {
    console.log(data);
    $('.entry').first().before(
        '<div class="entry well well-large">'
        + data.user
        + ' says: '
        + data.message
        + '</div>');
});
4

1 に答える 1

4

post常に HTTP リクエストを終了する必要がありますが、ハンドラーでそれを行っていません。そうしないと、Express はブラウザに応答を返さず、ブラウザは応答を待ち続けます (ある時点で待機に飽きてタイムアウトが発生するまで)。

代わりにこれを試してください:

app.post('/', function(req, res) {
  io.sockets.emit('messages', { 
    user: req.body.user,
    message: req.body.message
  });
  // end the request by ending the response
  res.end();
});

socket.io(別のプロトコルであるため、 でメッセージを送信するだけでは十分ではありません)

于 2013-05-19T20:08:42.863 に答える