2012-01-25 4 views
2

私は、Linux上でC言語で特別な目的のTCPサーバーを実装する予定です。ちょっとした調査をした後、シングルスレッド、1接続あたり1スレッドなど、いくつかの方法があるようです。ソケットには、データグラムとストリーム、そしてブロックと非ブロックの2つのオプションがあります。すべてが< 1kBのであり、ほとんどの物事が< 512Bある適度に単純なTCPサーバーのための良いアーキテクチャ

Client: request id [request info] 
Server: status id [response info] 

または

Client: request id [request info] 
Server: status id [response info] 
Client: additional request id [request info] 
Server: status id [response info] 

:コミュニケーションの

ほとんどが見えるようになるだろう。しかし、短期間に多くの個別の要求があるかもしれません。

サーバーを最も効果的に動作させるようにサーバーをセットアップするにはどうすればよいですか(リソースを消費しない、クライアントの要求を拒否しないなど)

+1

応答の生成に時間がかかりますか? – cnicutar

+2

TCPは、ストリームを使用していることを意味します。データグラムはUDPです。 – duskwuff

+0

帯域幅、接続数について考えていますか?サーバーがあまり負荷がかかっていない場合は、既存のプロトコル(おそらくHTTP、XMLRPC、またはSNMPなど)を使用することを検討してください。テキストメッセージ(Json、....)を使用することをお勧めします。なぜなら、それらは簡単にデバッグできるからです。 (単純なプロトコルの例についてはSCGIを見てください)。 –

答えて

3

私はあなたの質問がパフォーマンスにまで及ぶと思います。それは?

そうであれば、3つの質問:

  • クライアントの平均/最大数は、サーバが何を扱うことになるのですか?
  • 接続は永続的ですか、またはクライアントはすべてのX要求に対して接続しますか?
  • クライアントが新しい要求を送信したときにどの程度の処理が必要ですか?

とにかく、私は簡単に始めるでしょう。それを非ブロック化し、シングルスレッド化します。プロフィールを作成し、ストレステストを行います。提示されたパフォーマンスに満足できない場合は、根本的な原因を特定して修正してください。究極のオプションとして、プロセッサコアごとに1つのワーカースレッドにスケーリングできます。

信頼性と配信の順序について気にしない場合は、UDPを使用することをお勧めします。

+0

さて、良い出発点のように聞こえます。 – Dan

関連する問題