スキマハコ

わすれがちなスキマな事を詰め込んでいます。ITの他に暮らしについても書いています。

Webサーバは要求に対してシングルスレッドだった!!

ただしWebrickに限る(たぶん)

動かしてみた。

1.サーバ
 ↑ Aブラウザが要求
2.サーバ(Aの処理が長引いている)
 ↑ Aブラウザが応答まち
3.サーバ(Aの処理が長引いている)
 ↑ Aブラウザが応答まち
 ↑ Bブラウザが要求
4.サーバ(Aの処理が長引いている)
 ↑ Aブラウザが応答まち
 ↑ Bブラウザが要求受付まち

Aの要求を返さない限り、Bはずっと要求を受け付けてくれるのを待機してる。
たぶん、タイムアウトの設定はあるんだけど、使い物にならないよね!!!*1

対策として、以下の方法ができそう。*2

  1. ApatchServerを使う
  2. 噂のWebSocketに対応しているServerを使う
  3. Webサーバとアプリサーバを分ける

*1:そもそも、Webrickは開発用サーバなので、負荷がかかるようなことはさせないべきです

*2:そもそも、長い処理をWebサーバが平気でやってることが間違いだってことはわかってるんです…