因此,我试图设置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,然后消息被推送到那个通道,我只是不明白如何让多个客户机订阅不同的通道。
任何帮助理解这一点或指导我到一个更合适的设计模式。

最佳答案

如果您的通道是预定义的,您可以在服务器的配置文件中为每个通道创建一个em::channel.new,然后客户机将通过适当的通道发送/接收消息。
如果频道是由用户定义的,那么你需要在你的配置中设置一个散列(或某物)来存储频道,当客户机连接时,检查配置哈希,看看频道是否存在,如果没有,EM:频道。如果存在,则使用现有的通道。
在第二种情况下,您需要在客户端断开连接时执行一些逻辑,以处理在所有客户端都不存在时关闭通道的问题,否则会出现内存泄漏。

关于ruby - 具有EM-WebSocket或Goliath的多个订户,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11623352/

10-15 23:26