2016-07-29 22 views
0

私は電話とWebページの間の通信を行うためにSocket.ioを使用しています。私はSocket.ioについて多くの他の人が5分ほどアイドル状態になってから接続が落ちるのを見てきましたが、これは一定の情報を前後に出している接続です。接続を維持できるかどうかは約30秒です。Socket.ioを使用すると、接続が低下し続ける

私が実行しているサーバー側のコードは次のとおりです。

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

io.on('connection', function(socket){ 

    socket.on('create', function (room) { 
     socket.join(room); 
    }); 

    socket.on('player-move', function(msg){ 
     roomId = msg['room']; 
     move = msg['action']; 
     socket.broadcast.to(roomId).emit('player-move', move); 
    }); 

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

}); 

http.listen(443, function(){ 
    console.log('listening on *:443'); 
}); 

クライアント側はかなり基本的なEMITイベントです。例は次のとおりです。

$("#arrow-left").on("touchstart", function(){ 
    var senddata = { "room": roomId, "action": "d-l" }; 
    socket.emit("player-move", senddata); 
}); 

すべてが起動してから接続がただちに終了するまで、すべてが正常に実行されているようです。接続は通常5秒〜10秒後に再開します。誰も似たような問題が発生していますか?これは潜在的にコードではなくサーバーで問題になるでしょうか?以前はSocket.ioを使っていろいろなサーバーで同様のことをしてきましたが、この種の接続に問題はありませんでした。どんな助けや方向性もあります。ありがとう!

+0

あなたのサーバの 'var'宣言はどこにありますか? 'roomId ='、 'move ='は、非厳密モードでグローバルスコープ内でこれらの変数を定義し、サーバをstrictモードで完全にクラッシュさせます。クライアントはどこで 'roomId'を取得していますか?もしあなたが基本的に 'socket.broadcast.to(undefined).emit(...);'を実行するようにサーバに指示しているので、あなたのサーバをクラッシュさせるかもしれません。 –

+0

クライアントとサーバの間に、アウトソケット?あなたのサーバーは継続的に稼動しており、再起動していないことを確かめていますか? – jfriend00

+0

接続を解除してもよろしいですか?接続は、永続的な接続ではなく、長いポーリングに落ちる可能性があります。これは、さまざまな理由で発生する可能性があり、接続されていないように見えます。 – pay

答えて

0

別のライブラリwsと同じ問題がありました。クライアントの配列から切断要求を送信している特定のクライアントを削除することで、切断方法を正しく処理しようとしました。私は方法を正確には知らないが、それは私の問題を解決した。

clients = [] 

io.on('connection', function(socket){ 
    clients.push(socket); 

    // above methods 

    socket.on('disconnect', function(){ 
     console.log("disconnected"); 
     deleteFromArray(clients, socket.id); 

    }); 
}); 

function deleteFromArray(arr, element) { 
    position = arr.indexOf(element); 
    arr.splice(position, 1); 
} 
関連する問題