gpt4 book ai didi

ruby - 使用 EM-WebSocket 或 Goliath 的多个订阅者

转载 作者:太空宇宙 更新时间:2023-11-03 18:25:36 25 4
gpt4 key购买 nike

所以我正在尝试设置 em-websocket (或者可能是 Goliath ),以便用户可以选择不同的路线,从而只订阅该 channel ,例如:

example.com/channel_1

在那里打开的浏览器只会接收发布到 channel_1 的消息,实际上到那时它不必是像这样的路由我会满足于使用参数。所以我正在使用 AMQP,它具有直接交换和路由 key 的概念。是否有与 websockets 类似的东西?

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

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

所以这个例子使用了AMQP,我还是很想用的,但是我认为问题在于每个客户端都在重新实例化EM::Channel.new,然后推送消息到那个 channel ,我只是不明白如何让多个客户订阅不同的 channel 。

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

最佳答案

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

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

在第二种情况下,您需要在客户端断开连接时执行一些逻辑,以处理在所有客户端都消失或出现内存泄漏时关闭 channel 的问题。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com