1. ホーム
  2. javascript

[解決済み] Socket.IOのdisconnectイベント処理

2022-02-14 11:16:42

質問

この切断イベントを処理することができません。なぜソケットがクライアントに送信されないのか、クライアントが応答しないのかがわかりません。

サーバー

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

  socket.on('NewPlayer', function(data1) {

    online = online + 1;
    console.log('Online players : ' + online);
    console.log('New player connected : ' + data1);
    Players[data1] = data1;
    console.log(Players);

  });

  socket.on('DelPlayer', function(data) {

    delete Players[data];
    console.log(Players);
    console.log('Adios' + data);

  });

  socket.on('disconnect', function () {

      socket.emit('disconnected');
      online = online - 1;

  });

});

クライアント

 var socket = io.connect('http://localhost');

    socket.on('connect', function () { 

        person_name = prompt("Welcome. Please enter your name");

        socket.emit('NewPlayer', person_name);

        socket.on('disconnected', function() {

            socket.emit('DelPlayer', person_name);

        });

    });

クライアントが切断されたときにArrayオブジェクト[person_name]が削除されるはずですが、そうなっていないことがわかります。

解決方法は?

OK、プレイヤーを名前で識別する代わりに、彼らが接続したソケットで追跡します。次のような実装が可能です。

サーバー

var allClients = [];
io.sockets.on('connection', function(socket) {
   allClients.push(socket);

   socket.on('disconnect', function() {
      console.log('Got disconnect!');

      var i = allClients.indexOf(socket);
      allClients.splice(i, 1);
   });
});

これは、別の方法で考えるための助けになることを願っています。