どうしても高速なWeb サーバが書きたくなったので joyent の libuvと http-parser (nodejs が内部で使っているライブラリ)を使ってWeb サーバを書いてみた。
Date ヘッダとか、65536 バイト以上の POST ペイロードとか色々省いてるのでツッコミビリディ高いですが、ひとまず GET でファイルのサーブが出来る状態にはしたのでベンチマークを取ってみました。
5回程計測した平均で nginx が 25000req/sec、http-server が 24500req/sec でした。ほぼ互角までは来たのかなーと思います。
現状キャッシュなんかは考えてないので、純粋に非同期に拘っただけのコードになっています。
ちなみに mruby-uvと mruby-httpで書いたWebサーバはLinux で 9000req/sec、Windows(Core i5/3GHz)で 5000req/sec くらいしか出ませんでしたが、全てC言語で書いたこのサーバだと Linux 24500req/sec、Windows でも 15000req/sec は出ます。
研究材料として使って行こうと思います。
mattn/http-server - GitHubI/O は全て非同期で行いブロッキングしない作りとしました。これで絶対速くなるとは言わないけど、少なくともスケールはするんじゃないかと思います。
https://github.com/mattn/http-server
Date ヘッダとか、65536 バイト以上の POST ペイロードとか色々省いてるのでツッコミビリディ高いですが、ひとまず GET でファイルのサーブが出来る状態にはしたのでベンチマークを取ってみました。
# nginxCore i5/3GHz Ubuntu 14.04
$ ab -k -c 10 -n 10000 http://127.0.0.1/
# http-server
$ ab -k -c 10 -n 10000 http://127.0.0.1:7000/
5回程計測した平均で nginx が 25000req/sec、http-server が 24500req/sec でした。ほぼ互角までは来たのかなーと思います。
現状キャッシュなんかは考えてないので、純粋に非同期に拘っただけのコードになっています。
ちなみに mruby-uvと mruby-httpで書いたWebサーバはLinux で 9000req/sec、Windows(Core i5/3GHz)で 5000req/sec くらいしか出ませんでしたが、全てC言語で書いたこのサーバだと Linux 24500req/sec、Windows でも 15000req/sec は出ます。
研究材料として使って行こうと思います。