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

しかし、それはエラーを出します。したがって、何らかの方法でレール環境全体をロードする必要があります(実際に必要です)。

どんな助けでも大歓迎です....

PS Google グループの記事http://groups.google.com/group/faye-users/browse_thread/thread/620ee6440422687a?pli=1を使用してチャンネルに登録しようとしまし たが、まだ機能しません。発行されますが、サブスクリプションによって返されません。

4

1 に答える 1

0

私にとってうまくいっているのは、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アプリからユーザーに送信するために、script/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 に答える