Ruby on rails 避免服务器卡在SSE上(服务器发送事件)
我的服务器会被卡住,当用户多次打开SSE时 因为Redis似乎在SSE上有一些漏洞 即使客户端关闭浏览器或转到其他页面,流也不会关闭 顺便说一下,我不知道什么时候Ruby on rails 避免服务器卡在SSE上(服务器发送事件),ruby-on-rails,redis,Ruby On Rails,Redis,我的服务器会被卡住,当用户多次打开SSE时 因为Redis似乎在SSE上有一些漏洞 即使客户端关闭浏览器或转到其他页面,流也不会关闭 顺便说一下,我不知道什么时候 logger.info "Stream closed" logger.info "Client disconnected" 将被调用吗?关闭浏览器时不会调用它 这是避免这个问题的解决方法吗 def new_prizes_stream # http://ngauthier.com/2013/02/rails-4-
logger.info "Stream closed"
logger.info "Client disconnected"
将被调用吗?关闭浏览器时不会调用它
这是避免这个问题的解决方法吗
def new_prizes_stream
# http://ngauthier.com/2013/02/rails-4-sse-notify-listen.html
begin
response.headers.delete('Content-Length')
response.headers['Cache-Control'] = 'no-cache'
response.headers['Content-Type'] = 'text/event-stream'
logger.info "New stream starting, connecting to redis"
redis = Redis.new
redis.subscribe('messages.create', 'heartbeat') do |on|
on.message do |event, data|
if event == 'messages.create'
response.stream.write "event: #{event}\n"
response.stream.write "data: #{data}\n\n"
elsif event == 'heartbeat'
response.stream.write("event: heartbeat\ndata: heartbeat\n\n")
end
end
end
rescue IOError
logger.info "Stream closed"
rescue ActionController::Live::ClientDisconnected
logger.info "Client disconnected"
ensure
ap "close a live stream"
redis.quit
response.stream.close
end
end
我的建议是,不要在每个请求/SSE上创建连接,并对结果进行基准测试。每次执行时:
redis = Redis.new
如果您可以创建连接单例模式或工厂模式,您可以执行以下操作,而不是运行此模式:
redis = myPoolObj.getRedisConnection()
然后决定要在该池上执行什么操作以及要使用多少连接。我在上查看了文档,但没有看到类似于检查python时看到的内置API
您可以在回购协议上打开一个问题,询问是否有一种内置的方法可以在不管理自己的池的情况下执行此操作
这有用吗