再発明3日目 続HTTPサーバー

Cで書いた。

https://github.com/totem3/wheel

問題は文字列の分割だった。リクエストのパースがめんどくさすぎてcで書くのを諦めてしまっていたわけなんだが、改めて挑戦した。

strtok使えば分割できるということはわかったから、strtokのサンプル見ながら頑張る。

まぁとりあえずGETだったらpathにあるファイルを返すことができればいいので、methodとpathだけ取れるようにだけ頑張った。

cで書くと関数の分割とか全然わからない。。

ひとまずmainに詰め込んじゃったけどね。

httperfを使って同時アクセスのテストをしてみる

httperf --server localhost --port 18080 --uri /index.html --rate 3000 --num-conn 3000 --num-call 2

無茶苦茶な数字で試してみる。

--rate 2000までは耐えられた。

3000に行くとサーバーがsegmentation faultで落ちる。

これはサーバーの作り方が悪いような気がするな・・・

haskell製のサーバーの場合は、--rate2000でhttperfだけsegmentation faultで落ちる。

うーん。わからん。

apacheに投げてみたらapacheは--rate 3000は耐えた。

5000は死ぬ。

まぁ、瞬間のアクセスの多さで死ぬっていうことじゃないんだろうな。

httpサーバーが負荷について考えないといけないことが何があるのかっていうことと、どうやってそれを測るかちょっと今後調べてみる。