2011-06-21 4 views
0

機能や使いやすさのために、1つのネットワーキングライブラリが他のものより優れているとの記事がいくつかありますが、パフォーマンスに関連するものは見当たりませんでした。私はGoogleのすべてをチェックして、私は比較を見つけることができません。C++ HTTPSライブラリの性能(メモリフットプリント、CPU時間など)はどのように比較されますか

私はすぐにネットワーキングプロジェクトを開始しています.PocoまたはlibCurlを使用したいと思います。私は当初、Boost.ASIOを使用する予定だったが、HTTPSクライアントの実装はしていませんでした。 Boost.ASIOにはサンプルHTTPSクライアントが実装されていますが、実際のプロトコルハンドラは実装されていません。

答えて

2
  1. 問題ではありません。ボトルネックは、ほぼ確実にネットワークメディアになるか、HTTPS接続の上で何を処理していてもかまいません。 SSLはCPU時間の点で安価です。 (残念ながら、ネットワークの待ち時間の点では安いわけではありませんが、ライブラリのパフォーマンスはそれほど重要ではありません)。
  2. パフォーマンスは常にトレードオフです。どのライブラリが最適かを知る唯一の方法は、それらのうちのいくつかを試すことです。ほとんどの場合、差はごくわずかです。
+0

ありがとうございます。別の言い方をすれば、仲間のエンジニアが*最も軽い*ネットワーキングライブラリを尋ねると、彼は何を指していると思いますか?私はそれがメモリの足跡やパフォーマンスかもしれないと思った。 –

+0

@ジャマール:一般的に、私はバイナリサイズを考えます。 –

1

httpsサポートが必要な場合は、libcurlを使用することをお勧めします。 libcurlはプロキシを介してhttpsとhttpをサポートし、プロキシはhttpsをサポートします。サポートプロキシが必要な場合は、HTTP_PROXY環境変数のみを設定する必要があります。

Curlは、バッファにデータを書き込むためのfwriteのようなコールバックを提供します。

#include <curl/curl.h> 

typedef struct { 
    char* data;  // response data from server 
    size_t size; // response size of data 
} MEMFILE; 

MEMFILE* 
memfopen() { 
    MEMFILE* mf = (MEMFILE*) malloc(sizeof(MEMFILE)); 
    if (mf) { 
     mf->data = NULL; 
     mf->size = 0; 
    } 
    return mf; 
} 

void 
memfclose(MEMFILE* mf) { 
    if (mf->data) free(mf->data); 
    free(mf); 
} 

size_t 
memfwrite(char* ptr, size_t size, size_t nmemb, void* stream) { 
    MEMFILE* mf = (MEMFILE*) stream; 
    int block = size * nmemb; 
    if (!mf) return block; // through 
    if (!mf->data) 
     mf->data = (char*) malloc(block); 
    else 
     mf->data = (char*) realloc(mf->data, mf->size + block); 
    if (mf->data) { 
     memcpy(mf->data + mf->size, ptr, block); 
     mf->size += block; 
    } 
    return block; 
} 

char* 
memfstrdup(MEMFILE* mf) { 
    char* buf; 
    if (mf->size == 0) return NULL; 
    buf = (char*) malloc(mf->size + 1); 
    memcpy(buf, mf->data, mf->size); 
    buf[mf->size] = 0; 
    return buf; 
} 

int main() { 
    CURL* curl; 
    MEMFILE* mf; 
    char* ptr; 

    mf = memfopen(); 
    curl = curl_easy_init(); 
    curl_easy_setopt(curl, CURLOPT_URL, "https://github.com"); 
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, mf); 
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, memfwrite); 
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); 
    curl_easy_perform(curl); 
    curl_easy_cleanup(curl); 

    ptr = memfstrdup(mf); 
    printf("%s\n", ptr); 
    free(ptr); 

    memfclose(mf); 
}