2015-11-24 2 views
0

У меня вопрос о том, как SocketIO работает.Как SocketIO работает внутри?

Если я испускают сокет "room1":

socketio.sockets.to(room1).emit('chat.message',data); 

И это room1 зарегистрировано 10000 сеансов внутри ...

это то же самое, что перебирать этот код 10000 раз ?:

socketio.sockets.to(sessionId).emit('chat.message',data); 
  • Может быть, хуже всего в эффективности?

  • Излучение в комнату, внутри socketIO отправляет сообщение все сеансы, зарегистрированные в комнате? Или как работает SocketIO?

Этот вопрос, потому что у меня есть комната, что мне нужно, чтобы испустить сообщение только часть этой комнаты, а также у меня есть микро-номер с UserIds, и, возможно, является более сложным, чтобы создать другую комнату, повторите команду socket.emit и отправьте все микрокомнаты, которые мне нужно, чтобы исправить это сообщение.

ответ

1

Всякий раз, когда любой клиент, подключенный к серверу, он будет автоматически подключен к комнате с помощью roomId (некоторая случайная строка). И когда вы явно присоединяетесь к другой комнате, сокет будет подключен к обоим комнатам с помощью roomId (независимо от того, что вы указали).

socketio.sockets.to(sessionId).emit('chat.message', data); 
socketio.sockets.to(room1).emit('chat.message', data); 

Оба утверждения делают то же самое. Таким образом, излучение будет передано в комнату. Комната (sessionId) имеет только одного пользователя, а Room (room1) может иметь к ней несколько пользователей.

Внутренне он вызывает широковещательный метод socket.io-adpater.

https://github.com/socketio/socket.io-adapter/blob/master/index.js Line: 111

И итерация каждого подключенного клиента и передача данных.