gpt4 book ai didi

redis - 如何使用 sinatra、sinatra-websocket 和 redis-rb 从 Redis 消息通知 Websockets?

转载 作者:可可西里 更新时间:2023-11-01 11:44:39 25 4
gpt4 key购买 nike

我有这个https://gist.github.com/ohcibi/5418898 Gist 基本上只是来自 sinatra-websocket github 页面的示例和粘贴的一些 Redis 代码。部分

settings.redis.subscribe 'foobar' do |on|
on.message do |channel, message|
settings.sockets.each do |s|
s.send message
end
end
end

正在阻止 Sinatra 应用程序正常启动,因为 subscribe 正在阻止。我通过将订阅放在 ws.onopen 处理程序中取得了小成功,但这会覆盖每个新 websocket 的订阅(即只有最新的 websocket 会收到消息)。

当有新的redis消息传入时,如何做到能够通知所有连接的套接字?

最佳答案

我成功地将它放在另一个 Thread 中并为套接字使用 Thread 局部变量:

set(:watcher, Thread.new do
redis = Redis.new
Thread.current['sockets'] = []

redis.subscribe 'foobar' do |on|
on.message do |channel, message|
Thread.current['sockets'].each do |s|
s.send message
end
end
end
end)

然后我做

settings.watcher['sockets'] << ws

代替

settings.sockets << ws

settings.redis.publish 'foobar', msg

通过 redis 观察器通知套接字。

查看更新的要点:https://gist.github.com/ohcibi/5418898

关于redis - 如何使用 sinatra、sinatra-websocket 和 redis-rb 从 Redis 消息通知 Websockets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16100506/

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