我有一个rails 4应用程序,即进行背景演算。因此,用户按下按钮,然后启动长时间演算的后台作业(使用delay_job)并到达等待页面。尽管微积分是异步完成的,但我想找到一种方法来警告用户并在微积分完成后自动重新加载它。
我看了几个解决方案:
如果您对此问题有任何明智的解决方案,或者对列出的提示中的限制提出任何建议。
答案 0 :(得分:1)
我会解释这对你有用吗</ p>
<强> HTTP 强>
当您向Rails发送请求时,您的浏览器无法“监听”除直接响应之外的任何事情。 HTTP request已被“发送”&amp;没有任何机制等待异步过程完成
您的工作是为您的应用程序提供“监听器”,以便您的前端可以在生成时(超出HTTP范围)接收更新,因此websocket或SSE内容< / p>
我们之前使用Pusher
设置了您要查找的内容<强> “实时”强>
实现“实时”功能是您所需要的
这基本上意味着保持请求“永久”打开到服务器;收听服务器发回的任何“事件”。这是通过前端的JS完成的,客户端将“订阅”一个频道(通常是以用户为中心的频道),然后将所有数据发送给它
我们最近使用名为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
希望这为您提供另一种选择