C++ は動的ではないため、Web サイトを構築するための特に優れた基盤とは見なされていないことは理解していますが、部分的にサポートに落ちていると思います。ルートのようにC++プログラムを実行するサーバーはありますか?迷惑な書き換えでApacheを遅くします。サーバーを簡単に埋め込むことができる C++ ライブラリはありますか。
2 に答える
私は最近 (2 日前のように) C++ で Java Jetty サーブレットを書き直さなければなりませんでした (私も使用していた OpenCV の JNI の問題のため)。私はあなたとまったく同じ質問をしましたが、簡単な答えはありません (私も CGI を使いたくありませんでした)。私はいくつかのことを提案します:
ブーストを使って、ブーストを使って、ブーストを使って。
Boostを使用すると、クロスプラットフォーム展開が非常に簡単になり、(あえて言えば) 楽しくなります! 私の開発マシンは Windows 7 を実行していますが、サーバーを Linux サーバーにデプロイする必要があり、Boost によって非常に簡単になりました。
HTTP ライブラリを使用する
私のプロジェクトでは、cpp-netlibを見つけました。これにより、サーブレットを (それを呼び出すことができれば) 非常に簡単に作成できます。オブジェクトへのアクセスを提供しrequest
、response
マルチスレッドもサポートします。彼らのウェブサイトからのサーバーの例は次のとおりです。
#include <boost/network/protocol/http/server.hpp>
#include <string>
#include <iostream>
namespace http = boost::network::http;
struct hello_world;
typedef http::server<hello_world> server;
struct hello_world {
void operator() (server::request const &request,
server::response &response) {
std::string ip = source(request);
response = server::response::stock_reply(
server::response::ok, std::string("Hello, ") + ip + "!");
}
};
int
main(int argc, char * argv[]) {
if (argc != 3) {
std::cerr << "Usage: " << argv[0] << " address port" << std::endl;
return 1;
}
try {
hello_world handler;
server server_(argv[1], argv[2], handler);
server_.run();
}
catch (std::exception &e) {
std::cerr << e.what() << std::endl;
return 1;
}
return 0;
}
非常にすっきりとした外観で、(私が見た限りでは)非常に堅牢でもあります。独自の HTTP 1.x 実装を作成しないでください (しないでください)。これは膨大な時間の投資であり、車輪を再発明する理由がないため、これには強くお勧めしません。
サーバーにホットスワップ可能なパーツが必要な
場合は、LUA などの簡単なスクリプト言語を自由に使用してください。それ以外の場合は、反復ごとにコンパイルする準備をしてください。
C ++は動的ではないため、それを理解しています
そうではありません。つまり、サイト用に作成したコードは、サーバーのパッケージおよび OS と互換性のある方法でコンパイルし、変更するたびに再コンパイルする必要があります。おそらく本番サーバーで再コンパイルしたくないので、別の同一のサーバーのオーバーヘッドが発生する可能性があります(テスト用に既に持っている可能性があるため、問題にはなりません)。
そのビットからのパフォーマンスが必要な場合は、C または C++ で CGI スクリプトを作成できます。それを簡素化できるいくつかのライブラリがあり、チュートリアルを見つけることができるはずです(Googleで簡単に検索すると、これが表示されます)。
場合によっては、モジュールを記述してスクリプト言語を拡張することもできます。私は、PHP がほとんど C で実装されていることを知っており、他のほとんどのスクリプト言語では C モジュールを追加できると信じています (C++ はやや難しいかもしれませんが、注意またはラッパーで実行できるはずです)。あなたはそれを調べるかもしれません。
サイトに Qt を使用することはお勧めしません。Qt は実際にはそれを意図したものではないようで、必要のないものがたくさん含まれている可能性があります。この方法を使用する場合は、単純な C/C++ の方が優れています (そして高速です)。
スクリプト言語 (これは多少の意見です) と比較すると、慎重に作成され最適化された C/C++ は、多少高速でメモリ使用量が少ないと期待できますが、最初に記述して後で変更し、後で修正するのは少し難しいでしょう。おそらくデバッグ。ただし、問題が必要な場合は、実行可能な選択です。