Вам необходимо каким-то образом отслеживать, какие клиенты находятся в лобби вместе. Вы можете сделать это с помощью простого глобального массива вроде process.lobby[1] = Array(ClientASocket, ClientBSocket)
или чего-то подобного (возможно, с некоторыми дополнительными данными, такими как прозвища и т. Д.), Где ClientXSocket
является объектом сокета каждого подключаемого клиента.
Теперь вы можете привязать идентификатор лобби (1 в этом случае) к объекту сокета каждого клиента. Тип сеанса (без проблем с идентификаторами сеанса), если хотите.
// i just made a hashtable to put all the data in,
// so that we don't clutter up the socket object too much.
socket.sessionData['lobby'] = 1;
Что это позволяет сделать также, это добавить крюк событий в объекте сокета, так что, когда клиент отключается, сокет может remove itself from the lobby array сразу, а сообщение остальных клиентов, что клиент отключился.
// see link in paragraph above for removeByValue
socket.on('close', function(err) {
process.lobby[socket.sessionData['lobby']].removeByValue(socket);
// then notify lobby that this client has disconnected.
});
Я использовал socket
вместо net.Stream
или request.connection
или что-то вещь есть.
Помните в HTTP, если у вас нет подключений по подключению к сети, это приведет к закрытию соединения TCP, и, следовательно, клиент не сможет оставаться в фойе. Если вы используете обычное TCP-соединение без HTTP сверху (скажем, в приложении Flash или в WebSockets), вы должны иметь возможность держать его открытым, не беспокоясь о том, чтобы оставаться в живых. Есть другие способы решить эту проблему, чем то, что я показал здесь, но я надеюсь, что вы, по крайней мере, начали. Ключ сохраняет постоянный объект для каждого клиента.
Отказ от ответственности: Я не эксперт Node.js (я еще не успел его установить), но я читал об этом, и я очень хорошо знаком с браузером js, Я надеюсь, что это будет полезно как-то.