Rails rails 或者说 web 端如何实现实时日志信息?

wangyanzi321 · 2023年04月05日 · 最后由 mingyuan0715 回复于 2023年04月11日 · 1042 次阅读

最近要做一个小功能,点击一个按钮,通过 rails 调用系统自带的 hugo 程序,想要把 hugo 启动后的日志打印输出刀 rails 的 web 页面上。 这个东西前端需要什么技术?不知道有没有人了解过这种需求。我以前没做过,不太懂,好像不是前端 ajax 轮训这么操作的。

action_cable 发布订阅

这种场景是服务端长连接流式推向浏览器端. 现在要么用 websocket 要么 webrtc.

SSE 比 ws 更便捷

yqwoe 回复

感谢指导

u1450154824 回复

websocket 听说过 但是 webrtc 这个技术就没了解过了,感谢指导

FrankFang 回复

我了解了一下,这个好像比 websocket 好一点

get '/log', provides: 'text/event-stream' do
  stream :keep_open do |out|
    settings.connections << out
    out.callback { settings.connections.delete(out) }
  end
end
FrankFang 回复

求教:sse 啥意思?

https://github.com/kyuubi9/apitest

https://github.com/kyuubi9/apitest/blob/master/lib/apitest.rb

之前的一个实现,核心代码

Process.detach(
    fork do
      p 'Kill Apitest WebSocket Process ...'
      `lsof -i :9527 |awk '$1 == "ruby"  {print $2}' |xargs kill -9`
      begin
        filename = "#{Rails.root}/log/#{Rails.env}.log"

        EventMachine.run do
          WebSocket::EventMachine::Server.start(:host => "0.0.0.0", :port => 9527) do |ws|
            proc = Proc.new { |line|
              ws.send Ansi::To::Html.new(line.strip).to_html.strip
            }
            EventMachine::file_tail(filename, Reader, &proc)
          end
          p 'Start Apitest WebSocket Process !'
        end
      rescue Exception => e
        retry
      end
    end
  )
mingyuan0715 回复

Server-Sent Events

问了一下 chatGPT 不得不说真的好用哦

qichunren 回复

感谢回复,让我学了新知识。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号