2012-02-14 4 views
1

私はウェブサーバーにデータを送信しようとしています 今はlibcurlを使用していますが、私はそれに遅れているので問題に直面しています。C++はWebserverにデータを送信します

私はまったく新しいC++なので、ウェブページにデータを送信するために他にどのような選択肢が利用できるのか不思議に思っていました。

私は何かが今

sprintf(data, "&val1=&val2=&val3=&val4.....",val1, val2, val3, val4....); 
then send this data using curl post 

問題はそれ故カール、val4は実際に実際に毎秒2つのサンプル値を生成するプログラムからつかまされているVAL1、VAL2、val3は、ということですこれを好き持っています機能が遅くなります。 誰かがより良い選択肢で私を助けてくれますか?

答えて

0

これは遅くなるほどカールしません。非常に遅いプロセスを頻繁に誘導しているという事実です。

送信する前にデータをバッファしてください。それを大きな塊で送る。ダブルバッファリングと呼ばれる手法を見て、アップデートを見落とさないようにしてください。

http://en.wikipedia.org/wiki/Multiple_buffering

2

あなたはスピードのために、あなたは常にWebサーバでソケットを開こうとすると、直接TCP/IP経由自己生成POSTメッセージを送信することができなければならない場合。つまり、TCP/IP送信状態のサーバーからの応答だけでなく、適切なハンドシェイクを待たなければならないため、接続の「遅さ」がユーザーの制御下にあるとは限りません。

速度に関しては、一般にUDPはTCP/IPよりも優先されます。これは、応答のチェックやその他のパケット送信の保証がないためです。ただし、この場合は、最終的にバッファ領域が使い果たされないように、ソースからWebサーバーに送信しようとする前に、その値をバッファリングする必要があります。

+0

WebサーバーとのTCP/IP通信の例について私を導くことができますか? –

+0

基本的には、HTTP POST要求フォーマットに準拠するように文字列(ASCII)をフォーマットする必要があります。書式設定されたPOSTリクエストをWebサーバー上のポート80に送ります。これは、あなたの側で開いたソケットで 'write()'を呼び出すことです(Linuxの 'socket()'のドキュメントを参照)。ソケット上で 'read()'を呼び出すことで得られるHTTP応答を生成してください。いくつかの素晴らしい情報があります[ウィキペディアで](http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol)。各行の最後に 'cr'と' lf'文字を忘れないようにする必要があります。ありがとう、 – Jason

+0

私はそれを試してみるべきです –

関連する問題