Фэй и меняющиеся модели в вашем приложении - PullRequest
1 голос
/ 11 марта 2012

Я использую 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 но все еще не могу заставить его работать. Он публикуется, но не возвращается по подписке.

1 Ответ

0 голосов
/ 20 июня 2012

То, что работало для меня, - это чтобы сервер faye отвечал только за передачу и проверку сообщений.Если это успешно, я сохраняю их в redis так же, как это делает resque, чтобы он мог завершить обработку.

Преимущества состоят в том, что долго выполняющиеся задачи не замедляют ваши соединения с faye, и вы всегда можете добавить больше работников, если вам потребуется дополнительная обработка.

в верхней части входящего метода моего первого расширенияЯ создаю новое соединение em-redis

$redis ||= EM::Hiredis.connect @options[:redis] 

, затем, если оно проходит мои тесты, я сохраняю его в redis в формате, который использует resque.

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")

для передачи из моих рельсовприложение для пользователей Я использую следующий код в скрипте / faye_worker

https://github.com/SponsorPay/em-resque#in-a-rails-3-app-as-a-gem

Я обертываю вышеупомянутое с EM.synchrony, чтобы я мог инициализировать Faye перед работником

для отправки сообщений из вашей модели просто отправьте его в очередь асинхронного восстановления.

...