Несколько подписчиков с EM-WebSocket или Goliath

Поэтому я пытаюсь настроить em-websocket (или, возможно, Голиафа), чтобы пользователи могли перейти на другой маршрут и, таким образом, подписаться только на этот канал, например:

example.com/channel_1

Браузеры, открытые там, будут получать только сообщения, опубликованные на channel_1На самом деле до этого момента это не должен быть маршрут, подобный этому, я бы согласился на использование параметров. Поэтому я использую AMQP, и у него есть понятие прямого обмена и ключей маршрутизации. Есть ли что-то аналогичное этому с веб-сокетами?

У меня работает сервер Голиафа, но проблема в том, что, поскольку он использует общие конечные точки, я думаю, что все браузеры, открытые с подключением через веб-сокет, получают одинаковые сообщения, вот что я делаю:

channel.queue(params['channel'], :auto_delete => true).subscribe do |payload|
  config['channel'].push(payload)
end

Так что в этом примере используется AMQP, который я все еще хотел бы использовать, но проблема, на мой взгляд, заключается в том, что каждый клиент переосмысливает EM::Channel.newи затем сообщения отправляются на этот канал, я просто не понимаю, как бы я подписал несколько клиентов на разные каналы.

Любая помощь в понимании этого или приведение меня к более подходящей схеме проектирования.

1 ответ

Решение

Если ваши каналы предварительно определены, вы можете просто сделать EM::Channel.new в файле конфигурации для вашего сервера для каждого из каналов, тогда клиенты будут отправлять / получать сообщения через соответствующий канал.

Если каналы определены пользователями, то вам нужно настроить хеш (или что-то) в вашей конфигурации, который будет хранить ваши каналы, когда клиент подключается, проверьте хеш конфигурации, чтобы увидеть, существует ли канал, если он не 't, EM::Channel.new это и продолжить. Если он существует, используйте существующий канал.

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

Другие вопросы по тегам