6

socket.ioには再接続などすべての機能が組み込まれていることは知っていますが、機能しているとは思いません。他の人から見ても、socket.ioも機能していません。

ユーザーがコンピューターをスリープ状態にすると、コンピューターの接続が切断され、コンピューターを開いたときに接続が失われるため、ページを更新するまで通知などは何も送信されません。おそらくそれは私が正しくやっていないことですか?

var io = require('socket.io').listen(8080);
var users = {};

////////////////USER CONNECTED/////

console.log("Sever is now running");

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

    //Tell the client that they are connected
    socket.emit('connected');

    //Once the users session is recieved
    socket.on('session', function (session) {

        //Add users to users variable
        users[socket.id] = {userID:session, socketID:socket};

        //When user disconnects
        socket.on('disconnect', function () { 

        //socket.socket.connect();

             var count= 0;
            for(var key in users){
                if(users[key].userID==session)++count;
                if(count== 2) break;
            }
            if(count== 1){
               socket.broadcast.emit('disconnect', { data : session});
            }

            //Remove users session id from users variable
            delete users[socket.id];
        }); 


        socket.on('error', function (err) {
            //socket.socket.connect();
        });

socket.emit("connection")ユーザーが再接続したときに呼び出す必要があります。または、少なくともそのイベントで発生するイベントを呼び出す必要があります。

またsocket.socket.connect();、動作せず、エラーで戻り、「接続が存在しません」というエラーでソケットサーバーをシャットダウンします。

4

1 に答える 1

4

この問題は、io.connectパラメータに関連しています。

このクライアントコードを見てください(試行間の最大遅延が3秒で、永久に再接続を試みます):

 ioParams = {'reconnection limit': 3000, 'max reconnection attempts': Number.MAX_VALUE, 'connect timeout':7000}
 socketAddress = null
 socket = io.connect(socketAddress, ioParams)

問題に関連する2つの重要なパラメータがあります。

  • 再接続制限-再接続試行間の遅延の上限時間を制限します。通常、サーバーの停止時にますます大きくなります
  • 最大再接続試行回数-試行する回数。デフォルトは10です。ほとんどの場合、これがクライアントが試行を停止する理由の問題です。
于 2013-08-19T21:44:03.543 に答える