2015-05-20 3 views
2

У меня есть идентификатор сокета для каждого подключенного пользователя, который хранится в моей базе данных. Когда какой-либо пользователь отправляет комментарий или статус, я хочу передать его всем своим соединениям, используя идентификатор сокета, хранящийся в моей базе данных.Socket.io - Исправить в массив сокета id

Я могу передать сообщение отдельному клиенту, используя его/ее идентификатор сокета, используя io.sockets.connected [socket.id] .emit ('privateMsg', 'Hello! How are you?');

Но как я испускаю то же самое с массивом идентификатора сокета, который я создал с помощью запроса select из моей базы данных.

+0

Поддерживается ли идентификатор сокета и идентификатор пользователя на сервере server.js. Насколько я знаю. Когда вы обновляете или загружаете страницу на новой вкладке, она создает новый идентификатор сокета. –

+0

Да, я поддерживаю идентификатор сокета на своем сервере server.js. Всякий раз, когда загружается страница, я обновляю идентификатор сокета для этого конкретного пользователя. – TechMech

+0

'socketsids.forEach (функция (socketid) {io.to (socketid) .emit (...)}' – laggingreflex

ответ

1

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

socketids.foreach(function(socketid){io.sockets.connected[socketid].join(sendingSocket.id);}); 

Тогда вы можете испускают к этим разъемам с вашего отправки сокета, выполнив следующие действия:

sendingSocket.to(sendingSocket.id).emit('publicMessage', 'Hello! How are you?') 

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

+0

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

+0

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

4

Вы можете использовать концепцию rooms. Когда приходит соединение сокета, присоединитесь к соединениям с комнатой. И при отключении снимите сокет из комнаты.

socket.on('connection', function() { 
    socket.join('room1'); 
}); 

socket.on('disconnect', function() { 
    socket.leave('room1'); 
}); 

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

socket.broadcast.to('room1').emit('eventName', data); 
Смежные вопросы