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