使用websokets-rails gem每秒广播消息

时间:2014-02-20 21:39:48

标签: ruby-on-rails websocket

我正在使用websockets-rails gem构建一个每秒接收一些信息的应用程序。 现在,似乎所有消息都是在方法完全执行后发送的。

我的websockets控制器:

class DbTestsController< WebsocketRails::BaseController

  def run_tests_on_all
    dbtsch = DbTestsScheduler.new
    dbtsch.run(1, 10, message['shard'], :push) do |ops|
      send_message 'db_test.run_tests_on_all', ops
      Rails.logger.info(ops)
    end
  end

end

'run'方法看起来像

def run(ecfs, fafs, shard, operation)
    st = tep_t = Time.now
    while st + fafs.second > Time.now
      Octopus.using(shard) do
        send(operation)
      end
      if tep_t + ecfs.second <= Time.now
        tep_t = tep_t + 1.second
        yield(@ops) if block_given?
        @ops = 0
      end
    end
  end

在控制台中,我每秒都会看到Rails.logger.info(ops)输出消息,但send_message在方法执行完成后立即发送所有10个结果。

1 个答案:

答案 0 :(得分:2)

我认为你想要做的就是使用像sync

这样的宝石

使用Rails的实时部分。 Sync允许您为模型渲染部分,这些模型使用最少的代码在服务器上发生更改时在浏览器中实时更新。

您可以查看示例here