Socket.IO - как узнать, какой сервер c отключен? - PullRequest
0 голосов
/ 26 марта 2020

Я последовал другой ответ S / O , чтобы выяснить, как сообщить моему серверу, что клиент отключен с помощью

var socket = io.connect(<your_url>, {
'sync disconnect on unload': true });

Проблема в том, что это часть Исходная конфигурация сокета, я не могу сказать от сервера, кто из моих клиентов фактически отключился. На моей клиентской стороне я отображаю список имен пользователей для всех подключенных клиентов, поэтому мне нужно знать, какое имя пользователя удалить из этого списка для остальных клиентов.

код на стороне сервера, который запускается при работе клиента закрывается:

socket.on('disconnect', reason => {
        console.log('user disconnected', reason);
    });

, но переменная "reason" оказывается просто строкой с надписью: "transport close" без информации о фактическом клиенте, который отключился.

One Подход, о котором я думал, заключался в том, что всякий раз, когда клиент отключается, сервер может запрашивать ответ у всех подключенных клиентов и использовать его для отправки обновленного списка каждый раз, но это кажется чрезмерным. Я бы предпочел узнать, какой клиент отключился, когда он отключился, и просто передать идентификатор недавно отключенного клиента, чтобы другие клиенты могли обновлять свои соответствующие списки пользователей локально. В конце концов, когда присоединяется новый клиент, я передаю имя пользователя этого клиента, чтобы все клиенты могли обновляться локально - я хотел бы использовать один и тот же шаблон при отключении клиента.

Короче, кто-нибудь знает способ чтобы, в конфигурации "syn c отключить при выгрузке" файла socket.io, также отправить идентификатор клиента при выгрузке?

1 Ответ

0 голосов
/ 26 марта 2020

Оказывается, мне нужно было сохранить массив на сервере активных участников, добавляя к нему каждый раз, когда они подключаются.

let users = []
socket.on('join', data => {
   data.id === socket.id
   users.push(data)
})

socket.on('disconnect', reason => {
   let user = users.find(u => u.id === socket.id)
   // we emit an event from the server, not from a particular socket
   io.emit('player disconnected', {
      user
   }
})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...