2013-04-11 13 views
5

socket.ioでは、トランスポートxhrポーリングがアクティブなときに切断イベントは発生しません。 トランスポートをウェブソケットに切り替えると問題なく動作しますが、xhrポーリングでは動作しません。次のコードでsocket.io - xhrポーリングで切断イベントが発生しない

/* Basics */ 
var express = require('express'), 
    app = express(), 
    server = require('http').createServer(app), 
    io = require('socket.io').listen(server); 

server.listen(1337, null); 

io.set('transports', ['xhr-polling']); 

// routing 
app.get('/', function (req, res) { 
    res.sendfile("index.html"); 
    app.use(express.static(__dirname)); 
}); 

io.sockets.on('connection', function (socket) 
    socket.on('disconnect', function() { 
     console.log('LOL'); 
    }); 
}); 

切断は発生しませんが、私は行削除した場合 -
io.set('transports', ['xhr-polling']);
をそれは完璧に動作し、なぜそれがXHR-ポーリングでは動作しませんか? WebSocketだけで?

これを修正するにはどうすればよいですか?何か不足していますか?

事前に感謝;)

+0

私はこの質問にも答えが必要です。 –

+2

これはこの回答に関連していますか? http://stackoverflow.com/questions/12043893/socket-io-force-a-disconnect-over-xhr-polling – Strat

答えて

1

これは、クライアントがメッセージごとに繰り返し接続しているので、すぐにXHR-ポーリングを使用して切断を検出することは不可能です。

Socket.ioは、xhrポーリングソケットの非アクティブタイムアウトを設定することでこれを回避します。

これは、関連するドキュメントです:​​

heartbeat interval設定オプションを参照してください。デフォルトは25秒です。

Websocketは、ブラウザーとサーバーの間に持続的なtcpソケットを保持しているため、socket.ioは通常、ソケットが切断されたときにすぐに検出できます。

1

私は同じ問題を抱えていた、そして私はオプション{「アンロードの同期切断」:真}を使用するクライアントソケットに:

var socket = io.connect('http://yourServerDomain.com', {'sync disconnect on unload' : true}); 

それがすぐに切断イベントを送信するためのソケットを強制します。

関連する問題