gpt4 book ai didi

ruby-on-rails - 在后台作业后触发页面的重新加载

转载 作者:行者123 更新时间:2023-12-02 03:37:52 26 4
gpt4 key购买 nike

我有一个 rails 4 应用程序,它正在做一个背景演算。所以用户按下一个按钮,它会为长计算启动一个后台作业(使用 delay_job)并到达一个等待页面。尽管微积分是异步完成的,但我想找到一种方法来警告用户并在微积分完成后自动重新加载页面。

我查看了几种解决方案:

  • Faye 或 private_pub => 我不能为这个非常具体的工作使用另一台服务器
  • ActionController::Live => 一旦工作完成,我不确定如何触发操作
  • 轮询 => 目前最好的解决方案,但我希望找到比轮询更不贪婪的方法

  • 如果您对此问题有任何明智的解决方案,或者对我在列出的想法中的局限性提出任何建议。

    最佳答案

    我会解释这对你来说是如何工作的

    HTTP

    当您向 Rails 发送请求时,您的浏览器除了直接响应之外没有任何办法“监听”发生的任何事情。 HTTP request被“发送”并且没有任何机制可以等待异步过程完成

    您的工作是为您的应用程序提供一个“监听器”,以便您的前端可以在生成更新时接收更新(超出 HTTP 的范围),因此 websocketSSE东西

    我们已经使用 Pusher 设置了您之前要查找的内容

    “直播”

    实现“实时”功能正是您所需要的

    这基本上意味着保持对服务器“永久”打开的请求;监听服务器发回的任何“事件”。这是通过前端的 JS 完成的,客户端将“订阅”一个 channel (通常是一个以用户为中心的 channel ),然后将所有数据发送给它

    我们使用了一个名为 Pusher 的第三方系统。最近要实现这一目标:

    #GemFile
    gem "pusher", "~> 0.12.0"

    #app/controllers/message.rb
    def send_message
    public_key = self.user.public_key
    Pusher['private-user-' + public_key].trigger('message_sent', {
    message: "Message Sent"
    })
    end

    #app/assets/javascripts/application.js
    pusher = new Pusher("***********",
    cluster: 'eu'
    )

    channel = pusher.subscribe("private-user-#{gon.user}")
    channel.bind "message_sent", (data) ->
    alert data.message

    希望这为您提供另一种选择

    关于ruby-on-rails - 在后台作业后触发页面的重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22219641/

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