Храните какую-то структуру данных в памяти, куда вы сохраняете свои сокеты. Вы можете обернуть сокет node.js в свой собственный объект, который содержит свойство id. Затем вы можете сохранить эти объекты в структуре данных, сохраненных в памяти.
class User {
constructor(socket) {
this.socket = socket;
this.id = //some random id or even counter?
}
}
Затем сохраните этот объект в памяти, когда получите новый сокет.
const sockets = {}
server = net.createServer((socket) => {
const user = new User(socket);
sockets[user.id] = user
})
- Я не уверен, что вы подразумеваете под этим, но, возможно, вышеприведенный пункт поможет
- Это зависит от того, когда вы определяете начало нового хода. Новый ход начинается с того, что запускается другим пользователем? Если это так, используйте ваше решение для пункта 2, чтобы передать это сообщение соответствующему пользователю и записать что-то обратно в этот сокет.
- Использовать тайм-аут. Возможно, дайте вашему
User
классу дополнительное свойство timeout
всякий раз, когда вы хотите начать новый тайм-аут, делайте timeout = setTimeout(timeouthandler,howlong)
Если тайм-аут-обработчик срабатывает, у пользователя нет времени, поэтому пишите в сокет. Не забудьте отменить время ожидания, если вам нужно.
Кроме того, как примечание: если вы делаете это с чистыми сокетами tcp node.js, вам нужно придумать какой-то специальный протокол. Вот почему:
socket.on("data", (data) => {
//this could be triggered multiple times for a single socket.write() due to the streaming nature of tcp
})
Вы могли бы сделать что-то вроде
class User {
constructor(socket) {
this.socket = socket;
this.id = //some random id or even counter?
socket.on("data", (data) => {
//on each message you get, find out the type of message
//which could be anything you define. Is it a login?
// End of turn?
// logout?
})
}
}
РЕДАКТИРОВАТЬ: Это не то, что хорошо масштабируется. Это просто, чтобы дать вам представление о том, что можно сделать. Представьте, что по какой-то причине вы решили использовать один экземпляр сервера node.js для сотен пользователей. Все эти экземпляры сокетов пользователей будут храниться в памяти сервера