gpt4 book ai didi

ruby-on-rails - ActionController::Live 是否可以检查连接是否仍然存在?

转载 作者:行者123 更新时间:2023-12-03 14:18:21 25 4
gpt4 key购买 nike

我正在尝试使用 Rails 4 的实时流实现文本/事件流。它工作得很好,我遇到的唯一麻烦是我无法在不发送任何消息的情况下检查连接是否有效。

我想出的唯一解决方案是使用循环滴答发生器制作支持 channel ,以便一些后台任务会定期在那里发送消息。但它似乎是困惑和不可靠的。有更好的解决方案吗?

这是我的 Controller :

require 'persistency/sse'
require 'persistency/track'

class PersistencyController < ApplicationController
include ActionController::Live

def stream
response.headers['Content-Type'] = 'text/event-stream'

sse = Persistency::SSE.new(response.stream)
track = Persistency::Track.new(current_user)
redis = Redis.new

begin
redis.subscribe(:info, :chat) do |on|
on.message do |channel, message|
sse.write({ :message => message }, :event => channel)
end
end
rescue IOError
ensure
track.close
sse.close
end
end
end

最佳答案

好的,我找到了两个选项:

1)有趣但不好(因为我没有得到我应该使用什么服务器来处理1000个并行连接):

begin
ticker = Thread.new { loop { sse.write 0; sleep 5 } }
sender = Thread.new do
redis.subscribe(:info, :chat) do |on|
on.message do |event, message|
sse.write(message, :event => event.to_s)
end
end
end
ticker.join
sender.join
rescue IOError
ensure
Thread.kill(ticker) if ticker
Thread.kill(sender) if sender
track.close
sse.close
end

2)真棒。使用 Goliath 服务器。事实证明,它可以在没有任何代码的情况下检查连接是否丢失。在去歌利亚的路上发现了抽筋。它很轻巧,希望很快,但似乎被放弃了。

关于ruby-on-rails - ActionController::Live 是否可以检查连接是否仍然存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14268690/

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