1

我正在使用 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 群组文章http://groups.google.com/group/faye-users/browse_thread/thread/620ee6440422687a?pli=1订阅频道, 但仍然无法正常工作。它发布但不通过订阅返回。

4

1 回答 1

0

对我有用的是让 faye 服务器只负责传递和验证消息。如果成功,我将它们保存到 redis 中,就像 resque 一样,它可以完成处理。

好处是长时间运行的任务不会减慢您的费伊连接,如果您需要进一步处理,您可以随时添加更多工作人员。

在我的第一个扩展的传入方法的顶部,我创建了一个新的 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-rails-3-app-as-a-gem

我用 EM.synchrony 包装上面的内容,以便我可以在工作人员之前初始化 faye

要从模型中发送消息,只需将其发送到异步 resque 队列即可。

于 2012-06-19T21:19:39.010 回答