web-dev-qa-db-ja.com

C / C ++の高性能アプリケーションWebサーバー

CまたはC++で高性能(理想的にはイベントとオープンソース)のWebサーバーはありますか?

アプリケーションでメソッド/関数を呼び出し、HTTPリクエストクラス/構造体を入力し、それからHTTPレスポンスクラス/構造体を入力して返すことができるようにしたいと思います。

オープンソースでない場合は、ロングポーリング接続、キープアライブなどのサポートを組み込む必要があります。そうでなければ、これらのものを自分で追加できると思います。

使用可能なそのようなサーバーがわからない場合は、タスクに合わせて独自のWebサーバーを作成することをお勧めしますか? できないファイルベースであり、高性能C/C++で作成する必要があります。


編集:私はRuby Mongrel for Cのようなものを考えています。

39
Aaron Yodaiken

多くの高性能Webサーバー(クローズドソースサーバーを含む)で使用できるFastCGI実行可能ファイルを作成することをお勧めします。

7
Axel Gneiting

Axel Gneitingと同じことを提案しますが、このアプローチをとる理由を答えてくれました。

1)HTTPはプロトコルとして簡単ではありません-独自のサーバーを作成したり、既製のソリューションを修正したりすることは非常に複雑なタスクです-利用可能なAPIを使用して別の処理エンジンを実装するよりもはるかに複雑です

2)(変更されていない)メインストリームWebサーバーを使用すると、必要以上の機能が提供されます(そのため、スペースが増えます)。

3)(変更されていない)メインストリームWebサーバーを使用することは、通常、homebrewシステムよりもはるかに広範囲にテストされ、文書化されていることを意味します。

4)..および安全で安定している可能性が高い。

5)fastCGIを使用すると、あらゆる種類の言語を使用して、C++およびCを含むバックエンド処理を開発できます。これを容易にする 標準ツールキット が利用可能です。

6)あるいは、多くのWebサーバーがインプロセスインタープリターエンジンの実行をサポートしています(例:mod_php、mod_Perl)。ただし、独自のネイティブコードをモジュールとして実行することはお勧めしません。

ファイルベースにすることはできません。

え?どういう意味ですか?

4
symcbean

mongoose:1つのファイル。シンプルで使いやすい。 asycn ioではなく、組み込みの特定の目的に最適です。

グワン。優秀な。クラッシュしません。非常によく計画された構成。言い換えれば、c/c ++開発にとって非常にスマートで簡単であり、nginxと比較して非常にクリーンで賢明なAPIです。コアごとにスレッドを提供します。またはあなたが指定するもの。素晴らしい選択。最大の欠点(この領域に欠けている可能性があります):コードをステップスルーできません。

libevent:シングルコアマシンでは、シングルスレッドはデメリットではありません。結局のところ、そのポイントは非同期I/Oです。他のコア用のマルチスレッドがあります。

nginx:個人的な経験はありません。パッチサーバーで深刻な地位を得ています。 (ひどく混乱するAPI)

boost asio:asynchio(asio)用のC++ライブラリ。驚くばかり。私のような単純な人のためのフレンドリーで高レベルのAPIが必要です。その他、php、Java、javascript、node.js、その他のWeb言語から来た人。

python bottle:python web apps。has/isは組み込みのhttpdサーバー、libeventやnode.jsなど)

node.js:javascript asyncioサーバー。優れた選択。残念ながら、退屈になるJavaScriptでプログラムする必要があります。仕事を成し遂げるために言うべきことがありますが、プロセス中に自分自身を楽しむために言われることもあります。うまくいけば、node.phpが出てくる人はいないでしょう

4
Gabe Rainbow

私は熱心です nginx ユーザー; nginxはCで書かれています。 nginxはあなたにとってうまくいくようです。 nginxから最高の速度を引き出すには、nginxモジュールを作成します。以下に サードパーティモジュール を示します。このモジュールを調べると、必要なものを把握できます。

長いポーリングの要件については、httpプッシュモジュールをご覧ください。

2
pcting