Ruby on rails 关于数据更改的Rails回调
我有两个不同的应用程序使用一个数据库。其中之一是Rails应用程序,仅作为显示数据的用户界面 所以,我希望以某种方式钩住另一个应用程序在数据库中进行更改的时刻,并执行Rail操作(我希望使用WebSocket并向每个侦听器发送这些新数据) 那么,我该怎么处理呢?若我在Rails应用程序中更改了模型,我就可以使用ActiveRecord挂钩 所以,也许最好是运行后台工作程序,或者类似的东西Ruby on rails 关于数据更改的Rails回调,ruby-on-rails,websocket,rails-activerecord,Ruby On Rails,Websocket,Rails Activerecord,我有两个不同的应用程序使用一个数据库。其中之一是Rails应用程序,仅作为显示数据的用户界面 所以,我希望以某种方式钩住另一个应用程序在数据库中进行更改的时刻,并执行Rail操作(我希望使用WebSocket并向每个侦听器发送这些新数据) 那么,我该怎么处理呢?若我在Rails应用程序中更改了模型,我就可以使用ActiveRecord挂钩 所以,也许最好是运行后台工作程序,或者类似的东西 或者,如果第二个应用程序(修改数据库中的数据)将在消息队列(Redis、RabbitMQ)中写入内容,那么最
或者,如果第二个应用程序(修改数据库中的数据)将在消息队列(Redis、RabbitMQ)中写入内容,那么最好是在不使用WebSocket的情况下重复从javascript请求服务器? 您的rails应用程序将接收此事件并通知用户
rails应用程序和前端之间的最佳传输-WebSocket。例如使用。常见的做法是在某些端口上使用listners。这里有几个LIB可以为您提供帮助:
基本上,他们都有相同的想法:在提交后在
回调中向所有订阅了应用程序特定端口的客户端发送通知。好吧,谢谢大家的回答,我认为我找到了最好的解决方案
它使用新的Rails4功能-
因此,我的控制器代码非常简单易懂:
class GaugeController < ApplicationController
include ActionController::Live
def index
begin
response.headers['Content-Type'] = 'text/event-stream'
sse = SSE.new(response.stream, retry: 300, event: 'message')
loop do
#get data from model to modelData
sse.write(modelData)
sleep(0.5)
end
ensure
sse.close
end
end
class GaugeController
结束
也许给ActiveRecord打半秒钟电话太贵了,所以我可能会转到Redis