C言語でソケットを使ったHTTPプロキシサーバの実装を行っています。
なんで今更?20年位前のお話じゃないの?と思われるかもしれませんが、とある課題なので・・・・
プロキシサーバーって、やっている仕事はクライアント→サーバ、サーバ→クライアント、ってデータを通過させているだけだけど、ある時はサーバとして、またある時はクライアントとして役割を変えながら動作させているから、よく考えて設計しないとスパゲティ化してしまう。
何冊か参考になった書籍に導かれながら、仕上げることができました。
実装する中で、印象に残った技術としては、多重IOの部分です。ファイルディスクリプタのread時にブロックの問題を回避するためです。
そのために使われるのがselect()とかpoll()になりまして、今回はselect()で実装しました。
別の方法として、fork()を使うというのがありますが、コンテキストの増加は負荷が高くなるので、お勧めできません。
20年位前のお話と書きましたが、C10K問題で多重IOは今でも話題になります。開発環境や開発効率は年々進歩するけど、今でも変わらないコアの部分があるって、先人たちの知恵や苦労を感じるとともに、学べる恵みをかみしめています。
コメントを残す