2010-05-18 4 views
5

Я пытаюсь передать сообщение через службу socket.io (Node.js) socket.io (http://socket.io/) определенному подмножеству всех подписчиков. Каналы в Socket.io

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

Я не уверен, что addEvent ('channel_name', x) - это путь.

Я ничего не нашел в документах. Есть идеи?

Благодаря Мат

+0

http://stackoverflow.com/questions/4445883/ node-websocket-server-possible-to-have-multiple-separate-broadcasts-for-a-sin/4446178 # 4446178 –

ответ

0

Кажется, вы можете использовать Redis публикации/подписки функциональные возможности для этого. См. this link.

0

Я начинаю свое исследование с той же проблемой на данный момент. Socket.io выглядит отлично, но да, я думаю, вам нужно самому управлять списком подписчиков. В большинстве примеров приложений используется только один список подписчиков.

Я пришел через это ... http://faye.jcoglan.com/

Она превращает ваш сервер в приложение PubSub. Похоже, что он хорошо управляет списками абонентов и обеспечивает хорошую иерархию каналов. Однако я не могу найти пример ответа на опубликованные события в том же приложении, которое работает faye ?? Я предполагаю, что это возможно. Я должен посмотреть на источник. Кажется, он дает пример запуска отдельного узла на сервере, который функционирует как клиент.

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

+0

В качестве продолжения я использовал faye как часть http://nodeknockout.com/, и он отлично работает. На веб-сайте faye есть хороший пример того, как вам фильтр для аутентификации, если это необходимо. Я также заметил, что соединение имеет плагин промежуточного программного обеспечения для создания pubsub. Реализация faye определенно более полная. – bxjx

4

Это немного поздно (!), Но я заметил его в своих журналах реферера (я автор Фэй). Легко публиковать сообщения из вашего приложения, независимо от того, находится ли он на том же сервере, что и Faye, или нет. Например:

var faye = require('faye'), 
    http = require('http'); 

// Set up the server 

var server = http.createServer(function(req, res) { 
    // dispatch to your app logic... 
}); 

var bayeux = new faye.NodeAdapter({mount: '/bayeux'}); 
bayeux.attach(server); 
server.listen(8000); 

Если ваше приложение логики в том же процессе сервера вы можете сделать это:

bayeux.getClient().publish('/channel', {hello: 'world'}); 

В противном случае вы можете сделать клиент в узел, который подключается к серверу Фей:

var client = new faye.Client('http://0.0.0.0:8000/bayeux'); 
client.publish('/channel', {hello: 'world'}); 

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

0

Похоже this other question бы также ответить на этот вопрос, но если оно не следует смотреть на socket.io namespaces, думаю, он был введен совсем недавно, но подумал, что стоит упомянуть