0

C++ で単純な Web サーバーを実装しようとしています。そのために、リクエストに応じて、Web サーバーはサーバーからデータをフェッチします。そのために私は使用しています

int main()
{
std::ifstream file("/home/chaitanya/cpp/net/hello");
int length;
char *buffer;

if(file.is_open())
{
    std::cout << "File is open\n";

    file.seekg(0, std::ios::end);
    length = file.tellg();      
    file.seekg(0, std::ios::beg);

    buffer = new char[length];

    file.read(buffer, length);
    file.close();   
}   

printf("Data:\n\n%s\n", buffer);
delete[] buffer;

return 0;
}

これは、小さなファイルに対しては正常に機能します。サイズに関係なく、ソケットを介してファイルデータ全体を送信しています。それはより良いアプローチですか?

たとえば、ファイル サイズが巨大な場合は? 一度に特定のデータのチャンクを送信する方が良いと思います。

どのアプローチが良いか(または)Webサーバーで使用される他のより優れた/高速なアプローチかについて提案できますか?

前もって感謝します。:)

4

1 に答える 1

1

ほとんどすべての OS で、ソケットを介してファイルを送信するためのより優れた OS依存オプションlinuxがあります。そのクラスからソケットにデータを送信してから、これを使用します。Windowsstd::ostream

my_socket_stream s;
s << file.rdbuf() << std::flush;

この手法を使用すると、数ギガバイトのファイルを問題なく送信できます。

于 2012-10-30T19:21:30.597 に答える