xhr-polling を使用しているときにソケット接続が閉じない理由を知っている人はいますか? これは実行したいサーバー コードですが、xhr-polling を使用すると起動しません。ソケット接続は正常に機能します (これは安全なソケットであるため、stunnel を使用してワニスの背後で実行しています)。ブラウザーのアンロード時に切断イベントを手動で発行しようとしましたが、これは最適な解決策ではありません。
client.on('disconnect', function () {
delete connected_clients[id];
console.log(' debug - ' + 'client ' + client.id + 'is disconnected');
console.log(' debug - ' + 'total number of connected clients is ' + Object.keys(connected_clients).length);
});
クライアント側のコードでは、次のようにソケットを接続しています。
socket = io.connect(BASE_URL, {
"sync disconnect on unload":true
});
私のサーバー側の設定は次のとおりです。
io.enable('browser client minification'); // send minified client
io.enable('browser client etag'); // apply etag caching logic based on version number
io.enable('browser client gzip'); // gzip the file
io.set('log level', 3); // reduce logging
io.set('match origin protocol', true); // ssl support
io.set('sync disconnect on unload', true);
io.set('transports', [ // enable all transports (optional if you want flashsocket)
'xhr-polling',
'websocket',
'flashsocket',
'htmlfile',
'jsonp-polling'
]);
これは、クライアントがブラウザを終了したときに表示されるデバッグ メッセージです。
debug: xhr-polling closed due to exceeded duration
ノード 0.8.8 で socket.io バージョン 0.9.10 を使用しています。