7

インターネット サーバー (複数のクロスプラットフォーム プログラムで使用されるバックエンド コンポーネント) で実行する必要があるプログラムを開発しています。セキュリティ上の予防措置 (たとえば、バッファ オーバーフローや SQL インジェクション攻撃を防ぐため) についてはよく知っていますが、これまでサーバー プログラムや、この規模で使用されるプログラムを作成したことがありません。

プログラムは、数百または数千のクライアントに同時にサービスを提供できる必要があります。プロトコルは、処理速度と交換する必要のあるデータ量を最小限に抑えるように設計されており、サーバー側は C で記述されます。同じコードから Windows と Linux の両方のバージョンが存在します。

質問:

  • プログラムは通信をどのように処理する必要がありますか? 複数のスレッド、すべてのソケットを順番に処理する単一のスレッド、または非常に多くの着信接続ごとに (または接続ごとに) 新しいプロセスを生成しますか?
  • このプログラムは一度に数か月実行する必要があるため、メモリの断片化などについて心配する必要がありますか?
  • この種のプログラミングに特有の設計上の問題で、デスクトップおよびモバイル システム用のクロスプラットフォーム プログラムの経験豊富な開発者が認識していないものはありますか?

別の言語を使用する提案はありません。その決定はすでに下されています。理由は、私が立ち入る自由がないからです。

4

2 に答える 2

4

libeventまたはlibevとノンブロッキング I/O を使用します。このようにして、オペレーティング システムはスケジューリングの問題のほとんどを解決します。また、本質的にブロックしているタスクを処理するためにスレッドプールを使用するため、メインループをブロックしません。また、ディスクに対して大量のデータを読み書きする必要がある場合は、mmap を使用して、OS に可能な限り処理させます。

基本的なアドバイスは、可能な限り OS を使用することです。これを行うプログラムの良い例がVarnishで必要な場合は、非常によく書かれており、素晴らしいパフォーマンスを発揮します。

于 2013-04-15T08:57:55.777 に答える