Вот что вы можете сделать:
1.Вы можете использовать свою собственную структуру данных для хранения пользовательской информации, такой как socketId и других вещей, или перейти на redis, это хорошо в структуре данных памяти.
2.Вы должны хранить socketId для каждого пользователя, когда на сервере устанавливается новое соединение, используя любой из вышеперечисленных или каким-либо другим способом.
3. когда вы хотите отправить сообщение определенному пользователю, вам нужен его socketId и использовать этот код для отправки сообщения:
io.to(`${socketId}`).emit('hey', 'How are you');
4.При отключении пользователя просто удалите информацию пользователя, такую как socketId, и другую имеющуюся информацию.
Итак, когда пользователь присоединяется к вашему серверу, сохраняйте его информацию, а когда он уходит, просто удаляете ее.
Теперь предположим, что к вашему серверу подключено четыре пользователя. просто создайте массив объектов для отслеживания пользователей и идентификаторов сокетов. когда новый пользователь подключается, просто вставьте массив, а когда пользователь завершит работу, просто выполните цикл по массиву, а при совпадении socketId просто удалите этот объект из массива, просто
let users = [{name:'a',id:'socketId'},{name:'b',id:'socketId'},{name:'c',id:'socketId'},{name:'d',id:'socketId'}]
если вы хотите отправить сообщение пользователю b, просто выполните цикл по массиву и сопоставьте свойство name, а когда найдете подходящее имя, просто извлеките идентификатор этого пользователя и отправьте его
for(let i=0 ; i<users.length ; i++){
if(users[i].name == 'b'){
io.to(users[i].id).emit('hey', 'How are you');
}
}