ネットワークプログラミング相談室 Port26
■ このスレッドは過去ログ倉庫に格納されています
0813デフォルトの名無しさん
2010/10/12(火) 23:22:09もし「Linux&小規模&高速性は要求されない」のであれば、
マスタ・スレーブ方式のマルチプロセス構成でサーバを設計するのが、最も単純。
言い換えると、ソケット1つにつき、1つのプロセス(スレーブ)を割り当てる方式。
具体的には、Linux標準サーバのftpdやtelnetdがこの方式で実装されている。
各スレーブには独立した仮想メモリ空間が割り当てられているから、
スレッド方式と比較して安全な設計が可能だし、シングルプロセス&select方式と比較すれば
イベント駆動制御も不要だから楽に設計できるし、デバッグも簡単といった利点がある。
欠点はLinux(UNIX)依存であることと、大規模&高速性が他と比較して劣る事。
動作を簡単に解説すると、マスタプロセスがacceptで接続通知を待ち受け、
スレーブプロセスをfork&execする、というもの。(ApacheのCGIと同じ、と考えれば分かりやすい鴨)
あと、マスタプロセスは自分で開発しなくても、inetd(インターネットスーパーデーモン)に
接続待ち受け&スレーブ生成をまかせ、スレーブだけをC/C++等で実装することも、場合によっては可能。
UNIXでは古典的な方式で、例題も豊富に有るから、最終的にどの方式を選択するかとは別に、
一度勉強しておくことを勧める。将来、きっと役に立つはず。
教科書なら、このスレの図書コーナー(>>2)にある
・UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
・TCP/IPによるネットワーク構築〈Vol.3〉クライアント‐サーバプログラミングとアプリケーション
あたりがバイブル的な存在で、個人的なお勧めかな。
■ このスレッドは過去ログ倉庫に格納されています