繁体   English   中英

聆听Rails的剑圣事件

[英]Listening to Juggernaut events from Rails

我正在使用Juggernaut,Redis,SQLite和Rails 3.1建立一个简单的实时聊天

当另一个用户已断开连接(例如,他关闭了窗口)时,我想向每个用户写一条新消息,这是在监听剑圣的客户端断开事件。

剑圣文档说我可以在服务器端做到这一点(Ruby)

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

问题是我不知道将这段代码放在Rails应用程序的哪个位置(控制器,模型,观察者?)。 我试图将其放入模型中,但是服务器没有响应该模型中的那部分代码。

我认为我应该从服务器端监听该事件,因为如果用户由于关闭窗口而断开连接,则该用户没有“客户端”。

可能我缺少有关剑圣工作方式的一些信息。 任何帮助将不胜感激。

好的,最后我要回答自己:

我发现问题在于,当运行的进程调用Juggernaut.subscribe时,它会冻结,直到触发Juggernaut事件为止。 因此,您无法从服务器进程中调用Juggernaut,您需要一个新进程来运行该代码。

我的代码现在看起来像这样:Model:

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

希望对某人有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM