跳至内容 跳至搜索
方法
P

实例公共方法

periodically(callback_or_method_name = nil, every:, &block)

定期在通道上执行任务,例如更新在线用户计数器、轮询后端以获取新的状态消息、发送定期“心跳”消息,或执行一些内部工作并提供进度更新。

传递一个方法名称或 lambda 参数,或提供一个代码块来调用。使用 every: 关键字参数指定调用周期(以秒为单位)。

periodically :transmit_progress, every: 5.seconds

periodically every: 3.minutes do
  transmit action: :update_count, count: current_count
end
# File actioncable/lib/action_cable/channel/periodic_timers.rb, line 31
def periodically(callback_or_method_name = nil, every:, &block)
  callback =
    if block_given?
      raise ArgumentError, "Pass a block or provide a callback arg, not both" if callback_or_method_name
      block
    else
      case callback_or_method_name
      when Proc
        callback_or_method_name
      when Symbol
        -> { __send__ callback_or_method_name }
      else
        raise ArgumentError, "Expected a Symbol method name or a Proc, got #{callback_or_method_name.inspect}"
      end
    end

  unless every.kind_of?(Numeric) && every > 0
    raise ArgumentError, "Expected every: to be a positive number of seconds, got #{every.inspect}"
  end

  self.periodic_timers += [[ callback, every: every ]]
end