Прослушивание событий Джаггернаута от Rails - PullRequest
2 голосов
/ 05 августа 2011

Я создаю простой чат в реальном времени, используя Juggernaut, Redis, SQLite и Rails 3.1

Я хочу написать новое сообщение каждому пользователю, когда другой пользователь отключен (например, он закрыл окно), это для прослушивания отключенного события клиента Джаггернаута.

Документация Джаггернаута говорит, что я могу сделать это на стороне сервера (Ruby)

Juggernaut.subscribe do |event, data|
  # Use event/data
end

Проблема в том, чтоЯ не знаю, где я должен поместить этот код в мое приложение Rails (контроллер, модель, наблюдатель?).Я пытался поместить его в модель, однако сервер не отвечает ни на один запрос с этим фрагментом кода в модель.

Я думаю, что мне следует прослушать это событие со стороны сервера, потому что еслипользователь был отключен, потому что он закрыл окно, тогда у меня нет «клиентской стороны» для этого пользователя.

Возможно, я что-то упускаю из-за того, как работает Джаггернаут.Любая помощь будет оценена.

1 Ответ

6 голосов
/ 08 августа 2011

Хорошо, наконец, я отвечаю себе:

Я обнаружил, что проблема в том, что, когда запущенный процесс вызывает Juggernaut.subscribe, он останавливается до тех пор, пока не будет запущено событие Juggernaut. Поэтому вы не можете вызывать Juggernaut из серверного процесса, вам нужен новый процесс для запуска этого кода.

Мой код теперь выглядит так: Модель:

class MyModel < ActiveRecord::Base

  class << self
    def subscribe
      Juggernaut.subscribe do |event, data|
        case event
          when :subscribe
            # do something
          when :unsubscribe
            # do something else
        end
      end
    end
  end

end

А потом у меня есть скрипт ruby ​​myapp / scripts / juggernaut_listener:

#!/usr/bin/env ruby
require File.expand_path('../../config/environment',  __FILE__)

puts "Starting juggernaut listener"
MyModel.subscribe

Итак, после того, как я запустил сервер, мне нужно было запрограммировать слушателя Джаггернаута следующим образом:

./script/participations_listener

(обратите внимание, что вы должны дать + x сценарию).

Надеюсь, это кому-нибудь пригодится!

...