gpt4 book ai didi

ruby - 在redis订阅中捕获客户端连接断开

转载 作者:可可西里 更新时间:2023-11-01 11:02:22 26 4
gpt4 key购买 nike

我正在尝试使用 Redis 和 Sinatra 流构建一个通知系统。但是,当连接关闭时我似乎无法捕捉到,因此阻塞的 Redis 订阅 block 似乎永远不会关闭。实现这一目标的最佳方法是什么?

get '/user/:id/next_notification' do
stream :keep_open do |out|

$redis.subscribe("notifications:#{params[:id]}") { |on|

on.message { |channel, msg|
$redis.unsubscribe
out << msg
}
}

out.callback {
puts "unsub"
# $redis.unsubscribe
}

out.errback {
puts "unsub"
# $redis.unsubscribe
}
end
end

最佳答案

Redis 订阅是一个阻塞调用。所以你需要在一个单独的线程中执行它。不知道如何在 Ruby 中做到这一点。但我确定 ruby​​ 中必须有线程库。

将 Blocking 调用包装在 try..catch 中,您将从服务器端知道连接何时关闭。

关于ruby - 在redis订阅中捕获客户端连接断开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15824648/

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