拥有EM-WebSocket或Goliath的多个订户

时间:2012-07-24 02:38:37

标签: ruby eventmachine em-websocket goliath

所以我正在尝试设置em-websocket(或可能是Goliath),以便用户可以来到不同的路线,因此只能订阅该频道,例如:

example.com/channel_1

在那里打开的浏览器只会收到发布到channel_1的消息,实际上到那时它不一定是这样的路由我决定使用params。所以我使用的是AMQP,它具有直接交换和路由密钥的概念。是否有类似于websockets的东西?

我有一台Goliath服务器正在运行,但问题是,因为它使用共享端点,我认为所有使用websocket连接打开的浏览器都会收到相同的消息,这就是我正在做的事情:

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

所以这个例子使用了AMQP,我仍然想使用它,但我认为问题在于每个客户端都在重新实例化EM::Channel.new,然后消息被推送到那个频道,我只是不喜欢了解我将如何让多个客户订阅不同的渠道。

任何帮助理解这一点或指导我采用更合适的设计模式。

1 个答案:

答案 0 :(得分:3)

如果您的频道是预定义的,您可以在服务器的配置文件中为每个频道执行EM :: Channel.new,然后客户端将通过适当的频道发送/接收消息。

如果用户定义了频道,那么您需要在配置中设置一个散列(或其他内容)来存储您的频道,当客户端连接时,检查配置散列以查看频道是否存在,如果它没有,EM :: Channel.new它并继续。如果存在,请使用现有频道。

在第二种情况下,您需要在客户端断开连接上执行一些逻辑,以便在所有客户端都消失或者内存泄漏时处理关闭通道。