C ++ Web開発:ミニマリストのスタートを望む[終了]


8

現在、コンピュータサイエンスの学位を取得しており、自分のWebサーバーライブラリを構築したいと考えています。問題?私がWebサイトとのやり取りで行ったすべての検索は、情報の送受信の基本を説明する代わりに、「他の人が作成したこのライブラリを使用する」ことを示しています。

私は多くを求めているわけではありません-Webページに1つの英数字を入力し、ボタンを押して、その標準の1バイトの情報を非標準の助けなしにC ++プログラムに送信したいのです。図書館。


3
Apache(または他のほとんどのWebサーバー)と共通ゲートウェイインターフェイスを検討しましたか?または、C ++ プラグイン(関連するチュートリアル)を備えたapache ?

もう1つの提案はMongrel 2です。これは、ターゲットプログラムにリクエストを送信し、ZeroMQソケットを介して出力を受け取るだけです。
2013

低レベルから始めたい場合は、ASIOをブーストすることもできます
Daniel Gratzer 2013

これは本当に stackoverflow.comに移動する必要があります
ラバーブーツ

回答:


6

Boost.Asioは現在ネットワーキングを行う将来のC ++標準の方法(の1つ)に変換されています。(これは論文の1つです:http : //www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3388.pdf

これは、他のソケットライブラリやプラットフォーム提供のソケットライブラリを抽象化しているため、最新の C ++ を使用して見つける最も基本的なポータブル非同期通信システムです。

すべての最新のC ++ httpネットワーキングライブラリ(CppNetlibおよびCPPCMS)はそれに依存しています。ソケットと非同期(および同期)通信の基本を提供するライブラリを構築することをお勧めしますが、完全なシステムをセットアップしないでください。おそらく数年後には、Boost.ASIOを同等のC ++標準に置き換えることもできます。

また、Boost.Asioのドキュメントは、この種のコンテキストで通信がどのように機能するかについての洞察を提供します。したがって、それを読むことで多くの質問に答えることができます。

下位レベルを理解したい場合は、Asioコードを読んでください。C ++メタプログラミングやその他のC ++イディオムに慣れていない場合は少し読みにくいですが、それを読むことで多くを学ぶことができます。


2

あなたが欲しいいくつかの情報がここにあります-http ://en.wikipedia.org/wiki/Common_Gateway_Interface。あなたがやろうとしていることが非常に複雑であるように聞こえないかもしれませんが、それはあなたが思っているよりも少し複雑です。ドミニクが言ったように、トリッキーな部分はポートを開いてソケットから読み取ることです-C ++ランドではかなり難しいです。

まず、既存のWebサーバーを使用して、独自のCGIモジュールを作成することをお勧めします。Webサーバーはソケット側の処理を行い、基本的には、環境変数またはコマンドライン引数(GETリクエストの場合)から、またはPOSTの場合はstdin(これはデータだと思います)からデータを読み取るだけです。約15歳の私の記憶から)。あなたが望むのはこのようなものです:

#include <stdio.h>
#include <string.h>

int main(){
    char *s=getenv("CONTENT_LENGTH");
    int i=atoi(getenv("CONTENT_LENGTH"));
    printf("Content-type: text/html\n\n");
    printf("%s\n<br />",s); //Shows you CONTENT_LENGTH works
    printf("%d\n<br />",i); //Shows you it was converted to int
    char *tmp = new char[100];
    fread(tmp,i,1,stdin); //read from stdin something of i bytes to tmp
    printf("%s\n<br />",tmp);
    return 0;
}

ところで、読者への教訓として、このアプリケーションにはバッファオーバーフローのバグがあります。おそらくそれを修正したいと思います:)


1

私が間違っている場合は修正してください。ただし、標準のC ++コンポーネントのみを使用して、独自のWebサーバーを最初からプログラミングしたいようです。

まず、標準のtcp / ipソケットライブラリがないため、少しバインドされています。プラットフォームに応じて、WindowsソケットまたはPosixソケットを使用する必要があります。

次に、リクエスト/レスポンスの形式を調査する必要があります。少し検索すると、httpプロトコルのリソースが見つかるはずです。

その後、接続をリッスンし、要求に応答して応答を送信するサーバーを作成する必要があります。

それがあなたが求めているものではない場合、MichaelTの提案は妥当に聞こえます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.