2015-08-10 2 views
1

В настоящее время я начинаю работать с node.js, а в качестве первого небольшого проекта решили закодировать небольшое приложение чата. Я использую socket.io и следил за учебником чата на http://socket.io/get-started/chat/. Теперь я хочу расширить скрипт, но я застрял.Отправка/передача сообщения одному конкретному клиенту с использованием node.js asocket.io

Я не понимаю, как (или если вообще) socket.io управляет всеми подключенными клиентами на стороне сервера. Я могу использовать функцию io.emit для отправки сообщения всем подключенным пользователям. Но что, если я хочу отправить сообщение одному конкретному пользователю?

Я мог бы, конечно, «подделать» его, отправив сообщение всем клиентам, а затем на стороне клиента проверить идентификатор и т. Д. И обработать сообщение только в том случае, если есть совпадение. Но это все равно отправит сообщение всем, и его можно легко обойти пользователями с минимальными знаниями JS.

«Фильтрация»/«таргетинг» должно происходить на стороне сервера по соображениям безопасности. Но я не вижу/не понимаю, как (или если вообще) socket.io действительно управляет всеми клиентскими соединениями. Есть ли способ получить список всех текущих подключенных клиентов? Можете ли вы взаимодействовать со всеми подключенными клиентами в цикле? Можете ли вы назначить пользовательские идентификаторы/имя для соединений? И - как практическое приложение - можете ли вы затем отправить/отправить сообщение одному подключенному пользователю?

ответ

1

Каждое соединение сокета имеет уникальный идентификатор сокета, назначенный ему в первый раз, когда установлено новое соединение. Вы можете испускать данные с использованием этого конкретного идентификатора.

var socketId=socket.id; 
socket.broadcast.to(socketId).emit("messageToReceiver",data); 

Таким образом, вы можете отправить его конкретному человеку.

Чтобы получить все подключенные клиенты проверить этот URL: Socket.IO - how do I get a list of connected sockets/clients?

+0

Как позже найти этот socket.id и ссылки на нее, когда она потребность является гораздо более сложным понятием. –

+0

сохранить его в базе данных с именем пользователя – Subham

Смежные вопросы