2017-01-13 7 views
0

GCMを使用してユーザーに通知を送信しようとしています。現在、すべてのユーザーにメッセージを送信しており、ユーザーが多すぎるためサーバーが急増しています。だから私がアプローチしようとしているのは、毎分1000人のユーザーにメッセージを送信することです。resqueを使用して1分間隔で通知を送信する

これを設定する方法はありますか?

私はすべてのユーザーをループさせてから、1000ユーザーをバッチすることを念頭に置いています。まだループ内にタイムアウトを60秒間作成します。 しかし、私はこのアプローチが悪いと思っています。

+0

あなたはGCMトピックメッセージングを利用していない任意の理由は? –

答えて

1

あなたは試すことができます:

  1. ので、あなたが遅延時間を計算するためにインデックスを使用することができ、インデックスを持つユーザを一括して検索します。
  2. waitオプションを使用すると、タイムアウトではなくジョブを遅延させることができます。

User.find_in_batches.with_index do |group, index| 
    puts "Processing group ##{index}" 
    GCMJob.set(wait: index.minutes).perform_later(group.ids) # each batch will have 60 seconds in between 
end 

class GCMJob < ActiveJob::Base 
    def perform(user_ids) 
    users = User.where(id: user_ids) 
    users.map(&:send_gcm_message) 
    end 
end 
関連する問題