So-net無料ブログ作成

Goで簡易Webサーバ1 [プログラミング]

Webサーバは作ったことがない。ソケットで通信するのはいくらかやったけど、それだって大体出来上がっているものを直したりして、一から作ったものってのもあるかどうか覚えてないくらい。遊びではあったかもしれないけど、LLやリモートでWindowsのExeをたたきに行くのが面倒な時に作ったやつくらいだなぁ。なもんで、初心者に近いですね。というか、プログラミングで新しいことをしようとすると大体どこかの部分が初心者なわけで。

とはいえ、やったことないことをやらないのは、プログラマというかITに関わる人間としては致命的だからやってみる。まぁほぼサンデープログラマーなので細かいことは気にしない。


 
まずはC言語でどう書かれているのかを見てみる。Apacheみたいな完全体じゃなくて、本で書かれているようなごく限定された機能で。「ふつうのLinuxプログラミング」という本をずーっと前に買ったので、それを参考にGoに移植みたいな感じで。こういうのってどこまでやればいいかわからなくなりがちだから、とりあえずの目標値みたいな。


ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道

  • 作者: 青木 峰郎
  • 出版社/メーカー: ソフトバンククリエイティブ
  • 発売日: 2005/07/27
  • メディア: 単行本


GCCって既存のソフトをコンパイルするときぐらいしか使ってないな。もうllvmとかClang使えって感じになってそうだし。わかってないって意味ではどちらもどっこいどっこいだな。そこまで深く突っ込んだところで活躍できる場はなさそうだし、カーネルいじるとかさえもしてないしねぇ。

とりあえず、サポートサイトに行ってソースを取ってくる。

lxcのコンテナ上でやってたらいろいろ問題が噴出。ubuntuを使ったんだけど、本当に何も入っていない。aptitudeすらない。さすがにapt-getはあったからソフトをガンガン入れられたんだけど、とりあえず、aptitude, gcc, tmuxは鉄板なので入れておいた。一応入ったのはいいんだけどねぇ…。基本、コンテナでは入った初めからroot権限なので気持ち悪い。adduserとかでユーザーを作ればいいんだけど、いちいちsuで変わるのは面倒というか。

あとtmuxは使えません。なんでだろう。とにかく使えなかった。それによく考えたらlxcで独立固定IPでLAN内に晒す事すらできていないんだよね。他のサイト見てもお手軽に設定できているためしがないし、環境は揃えてしまったので、コンパイルするところまではやってみる。むぅ、やっぱりGUIなVirtualBoxをホストOSに入れて、GUIでLANを含めて全部設定するのが一番面倒くさくないのかなぁ。

どう動くかはtelnetで見てみることにする。ブラウザで見るのが一番なんだけど、ヘッダとかも見れるからいっか。

あとwgetとかmakeとかも入れた。というか、ほんとにコンテナのディストロって何も入ってないんだな。自分である程度作ってそれをクローンして使うってのが使いやすいのかもしれない。

なんか makeを使ってコンパイルしようとしたらエラーが出てきた。う~ん、10年前のソースだから仕方なしなのかもしれない。にしても、ソースファイルと紙面の整合性が全く書いてないもんだから、どこのソースを引っ張り出しているのか分かりづらい。プログラマに往々にして多いのが、見ればわかるから書かなくてもいいだろというバカ。仕様書を読むのもきついし、かと言って基地外みたいなソースを追うのはしんどい。動けばいいとか思っている人もいるので、論理性なぞ崩壊しているのもある。そんなものに手を入れたくもないし、その前に読みたくもない。

ソフトバンクの読み物はそういうところが間が抜けていて、あまりに編集者がスルーしている節があり、あまり長い間使用に耐える本が少ない。流行っているときにはいいんだけど、しばらくすると本当に使えない本になってしまうことが多くて、ソフトバンクパブリッシングの本はあまり買わない。


とはいえ、せっかく買った本なのだから使わないともったいない。本当はBusyBoxにもhttpdがあったのでそっちを参考にしたほうがいいかなと思ったりもしなくもない(どっちやねん)。でも、littlehttpdってのが本のサンプルソースにあって、700行そこいらなのでちょっと見てみようかなと思ったり。ゆくゆくは、他の軽いhttpdのソースも見ておいた方がいいね。

変えても変えなくてもどうぞなソースなので特に気にするべきところはないね。ソースと本を見てどこまで機能をサポートしているかを見つつ、そもそものhttp1がどこまでやるべきなのかを見てみる。その後Golangのライブラリがどこまで使えるものか検討してみよう。ちょっと見た感じ、GET以外はまともに実装していない気がする。他のはエラーを返して終わりにしているっぽい。

タグ:Golang
コメント(0) 
共通テーマ:パソコン・インターネット

コメント 0