2014/05/29

Recent entries from same category

  1. MRuby の TensorFlow Lite バインディングを書いた。
  2. flatten() に再帰は必要ない
  3. Windows 10 に AF_UNIX が来たので試してみた。
  4. C言語から分かりやすいAPIで扱える JSON パーサ「cJSON」
  5. C++ で STL フレンドリに扱えるJSONパーサ「json.hpp」

どうしても高速なWeb サーバが書きたくなったので joyent の libuvhttp-parser (nodejs が内部で使っているライブラリ)を使ってWeb サーバを書いてみた。
mattn/http-server - GitHub
https://github.com/mattn/http-server
I/O は全て非同期で行いブロッキングしない作りとしました。これで絶対速くなるとは言わないけど、少なくともスケールはするんじゃないかと思います。
Date ヘッダとか、65536 バイト以上の POST ペイロードとか色々省いてるのでツッコミビリディ高いですが、ひとまず GET でファイルのサーブが出来る状態にはしたのでベンチマークを取ってみました。

# nginx
$ 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/
Core i5/3GHz Ubuntu 14.04

5回程計測した平均で nginx が 25000req/sec、http-server が 24500req/sec でした。ほぼ互角までは来たのかなーと思います。
現状キャッシュなんかは考えてないので、純粋に非同期に拘っただけのコードになっています。

ちなみに mruby-uvmruby-http で書いたWebサーバはLinux で 9000req/sec、Windows(Core i5/3GHz)で 5000req/sec くらいしか出ませんでしたが、全てC言語で書いたこのサーバだと Linux 24500req/sec、Windows でも 15000req/sec は出ます。

研究材料として使って行こうと思います。
Posted at by | Edit


blog comments powered by Disqus