8

socket.io を使用して node.js サーバーをセットアップしようとしています。私が見ている問題は、サーバーが 25 秒ごとにクライアントを切断して再接続していることです。

ここに私のサーバーコードがあります:

var io = require('socket.io').listen(5876);
io.sockets.on('connection', function (socket)
{
    console.log("New connection established");

    socket.on('disconnect', function()
    {
        console.log("A client has disconnected.");
    });
}

私のクライアントは、socket.io.js ディストリビューションを使用して接続します。私が理解しているように(明らかに間違っています)、クライアントが15秒ごとに「ハートビート」(「::2」のメッセージ)を送信して、サーバーが接続が切れたと考えて切断しないようにする必要があります。基本的:

<script src="socket.io.js"></script>
<script>
    var socket = io.connect('http://localhost:5876');

    socket.on('connect', function(data)
    {
        console.log("Connected to server.");
        setInterval(function() { socket.emit("::2"); console.log("sent heartbeat"); }, 15000); // schedule a heartbeat for every 15 seconds
    });
</script>

ただし、クライアントはまだ 25 秒ごとに切断され、再接続されています (最初の 25 秒目刻みを除く)。

node.js サーバー コンソール ログは次のようになります (25 秒ごとにエコーしていたため、以前の同一の接続/切断フェーズがいくつか切り取られている可能性があります)。

New connection established
   debug - emitting heartbeat for client 652791160849839915
   debug - websocket writing 2::
   debug - set heartbeat timeout for client 652791160849839915
   debug - got heartbeat packet
   debug - cleared heartbeat timeout for client 652791160849839915
   debug - set heartbeat interval for client 652791160849839915
   info  - transport end
   debug - set close timeout for client 652791160849839915
   debug - cleared close timeout for client 652791160849839915
   debug - cleared heartbeat interval for client 652791160849839915
A client has disconnected.
   debug - discarding transport
   debug - client authorized
   info  - handshake authorized 5961067041159055274
   debug - setting request GET /socket.io/1/websocket/5961067041159055274
   debug - set heartbeat interval for client 5961067041159055274
   debug - client authorized for
   debug - websocket writing 1::
New connection established

サーバーが 25 秒ごとにクライアントを切断して再接続しないようにするにはどうすればよいですか?

4

2 に答える 2

9

最新バージョンの socket.io 0.9.1/0.9.1-1 を使用していますか? その場合、これは Guillermo によって確認された既知の問題です。現在の推奨事項は、0.9.0 または 0.8.7 にロールバックすることです。

https://github.com/LearnBoost/socket.io/issues/777

于 2012-03-05T12:39:31.810 に答える
2

ソケットの接続を維持するためにハートビートを送信する必要はありません。また、socket.emit の構文は次のとおりです。

          socket.emit('event_name',{"data"});
于 2012-03-05T10:56:38.187 に答える