Webサーバは要求に対してシングルスレッドだった!!
ただしWebrickに限る(たぶん)
動かしてみた。
1.サーバ
↑ Aブラウザが要求
2.サーバ(Aの処理が長引いている)
↑ Aブラウザが応答まち
3.サーバ(Aの処理が長引いている)
↑ Aブラウザが応答まち
↑ Bブラウザが要求
4.サーバ(Aの処理が長引いている)
↑ Aブラウザが応答まち
↑ Bブラウザが要求受付まち
Aの要求を返さない限り、Bはずっと要求を受け付けてくれるのを待機してる。
たぶん、タイムアウトの設定はあるんだけど、使い物にならないよね!!!*1
対策として、以下の方法ができそう。*2
- ApatchServerを使う
- 噂のWebSocketに対応しているServerを使う
- Webサーバとアプリサーバを分ける