2016-08-27 7 views
4

Я нашел, что легче просто настроить собственный пользовательский путь для нескольких конечных точек, как этотsocket.io без использования функций по умолчанию пространство имен/номеров

стороне сервера:

io.on('connection', function(client) { 

    var username = client.handshake.headers.users[0].username; 

    client.on(username+'_con1', function(data) { 
     io.emit(username+'_con1',data); 
    }); 

    client.on(username+'_con2', function(data) { 
     io.emit(username+'_con2',data); 
    }); 

} 

выше подхода правильно? по крайней мере, я могу заставить его работать.

ответ

1

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

Сложно сказать, является ли это лучшим/правильным способом без какого-либо контекста. Но вы должны смотреть в пространства имен и комнаты и решать сами! http://socket.io/docs/rooms-and-namespaces/

1

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

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

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

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

Пространство имен больше похоже на подключение к определенному каналу. Клиент решает, к какому каналу они хотят подключиться. Затем сервер решает, какое пространство имен отправляет данное сообщение.

Комната - это сервер, который подписывает клиент, чтобы упростить отправку определенного набора клиентов тем же самым сообщениям или в некоторых случаях для обмена входящими сообщениями от одного клиента со всеми остальными клиентами в комнате (например, в чате).

+0

поэтому у меня есть веб-приложение с 3 модулями (говорит, что это панель, настройка, каталог). Мне нужно иметь только 1 соединение и использовать 3 пространства имен вместо 3 уникальных конечных точек? –

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