所以我正在尝试设置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
,然后消息被推送到那个频道,我只是不喜欢了解我将如何让多个客户订阅不同的渠道。
任何帮助理解这一点或指导我采用更合适的设计模式。
答案 0 :(得分:3)
如果您的频道是预定义的,您可以在服务器的配置文件中为每个频道执行EM :: Channel.new,然后客户端将通过适当的频道发送/接收消息。
如果用户定义了频道,那么您需要在配置中设置一个散列(或其他内容)来存储您的频道,当客户端连接时,检查配置散列以查看频道是否存在,如果它没有,EM :: Channel.new它并继续。如果存在,请使用现有频道。
在第二种情况下,您需要在客户端断开连接上执行一些逻辑,以便在所有客户端都消失或者内存泄漏时处理关闭通道。