2014年10月5日日曜日

HubotのHTTP待ち受けはシーケンシャルかつ着実に実行されるという実験結果

robot.router.post()によるHTTP待ち受けを受けた処理がものすごく長時間かかってる最中に、この同じrobot.router.post()が受けるべきHTTPリクエストをもう1個撃ったら如何?

という実験をしてみた。

予想


(1) 取り込み中なので聞いてませんでしたてぃひっ、と思われて取りこぼされてしまう?

(2) あるいは、同じrobot.router.post()によるプロセスが2個同時並行で走るような状態になる?

(3) それとも、忙しい中のリクエストもしっかり受付されて、処理待ちキューみたいのができて、順次処理される?

結果



答えは(3)でした。

けっこう感動しました。

実況


2個目のリクエストを撃ったすぐ後に、それによる処理が始まった気配がなかったので、(2)でないことはすぐわかった。

(1)なのかな?
と思ったが、1個目の処理が終わったら、2個目の処理がたちどころに開始された。
それを見た瞬間、(3)とわかった。

いや~有能な秘書ですねHubot嬢

IRC出力


ただし、IRCへの出力は、かなり遅れた。
1個目の処理が完了しても、1個目からのIRC出力はちょこっとしか出てこず。
2個目の処理が完了した頃に、1個目からのIRC出力の残りが出てきた。
2個目の処理が完了しても、2個目からのIRC出力は出てこなかった。
呑み込まれてしまったか…。
と思ったが、数秒後、2個目からのIRC出力もちゃんと出てきた。

やはり正道はイベントの活用


なのでやっぱり、長時間かかる処理の必要が発生したときは、要処理イベントを発生させて、リスナにつづきをやらせるのが正道そう。

0 件のコメント:

コメントを投稿