我正在使用FAYE和rails应用程序唯一让我很恼火的是我不能根据收到的消息创建或更改模型。
看起来应该是这样的https://github.com/jamesotron/faye-rails但这有点麻烦。
有没有办法通过扩展来更新模型?也许是这样的:
require 'faye'
require './app/models/message.rb'
Faye::WebSocket.load_adapter('thin')
require File.expand_path('../config/initializers/faye_token.rb', __FILE__)
class MsgMonitor
def incoming(message, callback)
Message.create(:name=>message.to_s)
callback.call(message)
end
end
faye_server = Faye::RackAdapter.new(:mount => '/faye', :timeout => 45)
faye_server.add_extension(ServerAuth.new)
faye_server.add_extension(MsgMonitor.new)
run faye_server
但它给出了一个错误。毫无疑问,它应该以某种方式加载整个rails环境(这是实际需要的)。
如有任何帮助,我们将不胜感激。。。。
PS尝试使用Google Group文章订阅频道http://groups.google.com/group/faye-users/browse_thread/thread/620ee6440422687a?pli=1但仍然无法使其发挥作用。它发布但不通过订阅获取。
对我来说一直有效的是让faye服务器只负责传递和验证消息。如果成功,我会像resque那样将它们保存到redis中,这样它就可以完成处理。
其好处是,长时间运行的任务不会减缓你的faye连接,如果你需要进一步处理,你总是可以添加更多的工人。
在我的第一个扩展的传入方法的顶部,我创建了一个新的em-redis连接
$redis ||= EM::Hiredis.connect @options[:redis]
然后,如果它通过了我的测试,我会以resque使用的格式将其存储在redis中。
m = {'class' => "Message", 'args' => ['handle_message', {name: message.to_s}.to_json]}
$redis.rpush("resque:queue:faye", m.to_json )
$redis.sadd("resque:queues","faye")
为了将rails应用程序发送给用户,我在脚本/faye_worker 中使用了以下代码
https://github.com/SponsorPay/em-resque#in-a-轨道-3-应用程序即宝石
我用EM.synchrony包装了上面的内容,这样我就可以在工作之前初始化faye
要从模型中发送消息,只需将其发送到异步resque队列即可。