Threadを使う
RailsでThread使う機会がないと思っていたけどあった。
controllerで複数のサーバへGetリクエストを送信する、という処理を書きたかった。
そのまま書けば、レスポンスが帰ってこないと次のリクエストを投げれないのでとてもパフォーマンスが悪い。
それでThread使ってみた。
def index threads = [] Connection.all.each do |connection| threads << Thread.new do ActiveRecord::Base.connection_pool.with_connection do connection.health_check # リクエスト投げてる p "finish #{connection.server.nickname}." end end end threads.each { |t| t.join } end
ActiveRecord::Base.connection_pool.with_connection
というのは、スレッドそれぞれがDBへコネクションを貼らないようにするもの。
threads.each { |t| t.join }
スレッド全てが終了するまで待機する(ような振る舞いをする。詳しくはわからない)。
このままでもパフォーマンス悪いので"threads.each { |t| t.join }"を消して、
すべての処理が終ったタイミングで一部のDOMを更新するみたいなことしたい。それ実現するにはWebSocketさん使うっぽい、、、