ruby-on-rails - Juggernaut 2 的服务器端计时器

标签 ruby-on-rails node.js juggernaut

我正在使用 Juggernaut 2 编写一个用于实时推送通知的 Rails 应用程序,我不确定如何解决这个问题。我在聊天室中有许多用户,我想运行一个计时器,以便每 30 秒向聊天室中的每个浏览器推送一次。 Juggernaut 2 是基于 node.js 构建的,所以我假设我需要在那里编写这段代码。我只是不知道从哪里开始将其与 Juggernaut 2 集成。

最佳答案

我只是简单浏览了 Juggernaut,所以对我的回答持保留意见...

  1. 您可能对 Channel 对象感兴趣 (https://github.com/maccman/juggernaut/blob/master/lib/juggernaut/channel.js) 您会注意到 Channel.channel 是一个对象(想想 ruby​​ 的哈希)所有存在的 channel 。您可以设置一个 30 秒的循环计时器 (setInterval - http://nodejs.org/docs/v0.4.2/api/timers.html#setInterval) 来对您的所有 channel 进行操作。
  2. 每次循环迭代要做什么?那么,上述 channel 代码的链接有一个发布方法:

    publish: function(message){
    var channels = message.getChannels();
    delete message.channels;
    
    for(var i=0, len = channels.length; i < len; i++) {
      message.channel = channels[i];
      var clients     = this.find(channels[i]).clients;
    
      for(var x=0, len2 = clients.length; x < len2; x++) {
        clients[x].write(message);
        }
      }  
    

因此,您基本上必须创建一个 Message 对象,并将 message.channels 设置为 Channel.channels,如果您将该消息传递给 publish 方法,它将发送给您的所有客户端。

至于您消息的内容,我不知道您使用的是什么客户端(socket.io?有人已经用 Juggernaut 和 socket.io 为您构建的聊天客户端?)所以这取决于您。

至于将创建间隔和触发回调以将消息发布到所有 channel 的代码放在哪里,您可能需要在此处查看创建实际服务器监听给定端口的代码:(https://github.com/maccman/juggernaut/blob/master/lib/juggernaut/server.js)如果你在 init() 中附加间隔,那么一旦你启动服务器,它就会每 30 秒检查一次以发布你给定的消息到每个 channel

关于ruby-on-rails - Juggernaut 2 的服务器端计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5227604/

相关文章:

node.js - 如何在 Node js 聊天应用程序中存储用户的 session 信息?

javascript - Webpack 无法解析@import of scss/css

ruby-on-rails - https 网站上的主宰

ruby-on-rails - Rails 3.1 在 Ubuntu 11.10 上使用 Socket.io/Juggernaut

redis - 想在后台不间断地运行redis-server

ruby-on-rails - Rails form_for fields_for 未提交参数

ruby-on-rails - Rails 路由错误。没有路线错误

node.js - 使用 bcrypt 来确保密码没有重复

ruby-on-rails - 使用 Redis 作为身份验证 token

ruby-on-rails - WkWebView 有时会丢失 session 变量