ネットワークプログラミング実験

という名の放置プレイに耐えながら、HTTPサーバーをうにうに書いている。

  • ソケット通信
  • URI (percent)encode/decode
  • HTTPリクエストヘッダの限定的な解析と、結果の出力(Controller)
    • パス
    • メソッド
    • クエリ文字列
    • クッキー

このあたりを実装した。簡単なショッピングサイトを構築しろとのことなので、今は構築のための土台となるコードをうにうに書いている。あと必要なのは

  • 簡単なテンプレートエンジン(View)
  • スレッドセーフなデータコンテナ(Model)

MVCモデルを知ってるだけで、機能の切り分けの方針が立てやすい。まだCしかできてないんだよな。。。


C++と Pthreads でミニマルなHTTPサーバを書く - bkブログ

後でHTTPサーバをマルチスレッド化しなきゃいかんのだけど、これが参考になりそう、というかまんま使えそう。



shiro 『むー、C++httpdを書かせるのか…

いまどき、RFC2822やMIMEメッセージのパージングなんて部分は文字列処理がもっとsaneな言語でやった方が却って本質がわかりやすんでないかと思ったり。それにTCPより上の処理がメインになるわけだからはたして「ネットワークプログラミング」の勉強になるんだろうか。

C++でやらせるならC++ならではなところを書かせたらいいんじゃないかとか思うなあ。指定された複数のターゲットIPアドレスに対して並行して tracerouteなんてどうか。rawソケットを扱ったりバイナリパケットをごにょごにょしたりsenderとreceiverでスレッドを分けたり、不毛な部分抜きで楽しめそうだが。とここで書いてもしかたないけどね…
(こういうのがC++でなきゃ書けないというわけじゃないけど(現にこないだ仕事で似たようなツールをGaucheで書いたし)、C++で書いても「詰まらない部分」が少ないんじゃないか、ということです)』

実験指導書には、どの言語を仕様しろとは明確に書いてないので、実際はもっと高級な言語でやってもよいのかもしれません。ただ、指導書の記述がすべてC言語なのでおそらくC言語を使うことを意図しています。初回はC言語で書きはじめたのですが、文字列の処理を考えるとこりゃやっとれん、と思ってstd::stringやboostが使えるC++にしました。2回目の時にC言語以外を使ってよいのか確認しようかと思ったら、教官は来ないし担当TAに聞いても困り顔(´_`;)

指導書を読む限り、この実験で学んでほしい(と思っているであろうこと)は、ソケットを使った通信と、マルチスレッドプログラミングなのではないかと思います。それだけだったら、大抵の高級言語でもできるし、C/C++でlow levelなことをやるならsocketのレイヤの下(上にあるraw socketやバイナリパケット)をやったほうが楽しいと思うんですけどねぇ。

他にもいろいろ思うところはあるんですけど、C++とマルチスレッドの練習と割り切って書くことにしています。