我想在创建新模型时更新节点服务器。我需要类似发布/订阅模式的东西,其中订户是node.js服务器,发布者是rails控制器。有没有办法实现这个目标?
* * * * *编辑* * * * *
感谢所有回答的人,我使用redis解决了这个问题。
On Gemfile:
...
require 'redis'
...
运行捆绑安装
在config / initializers / redis.rb上:
$redis = Redis.new(:host => 'localhost', :port=> 6379)
On MyModel.rb:
...
class MyModel < ActiveRecord::Base
after_create {|my_model| my_model.message 'create' }
after_update {|my_model| my_model.message 'update' }
after_destroy {|my_model| my_model.message 'destroy' }
def message action
msg = { 'type': action, 'my_model': self }
$redis.publish 'rt-change', msg.to_json
end
end
...
在package.json上:
...
"dependencies" : {
...
"redis": "0.7.3"
},
...
运行 npm install
在node.js上:
var redis = require('redis').createClient();
redis.subscribe('rt-change');
redis.on('message', function(channel, message){
...
}
答案 0 :(得分:2)
根据我的经验,这里有一些解决方案:
Pros
:易于实施
Cons
:如果在调用
为此,我们可能会实施一个可重复的策略,但它很复杂,因为如果有很多失败,我们会感到困惑,这将会被重试或取消。
假设事件很重要或有很多订阅者:(这是我的想法,我还没有实现)
AWS SNS支持我们这样做,以防我们熟悉AWS,但外面有很多其他选择。
Pros
:易于发布给多个订阅者
Cons
:实施耗时
对于所有这些解决方案,security
至关重要且必须考虑,订阅者可能会收到陌生人的活动?是的,在制定解决方案时也要设置安全性
答案 1 :(得分:2)
帮助您实现这一目标的几个步骤: