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

アプリケーションをserver/clientという風に分けた時のserver側に対して、自分は結構苦手意識がある。そもそもネットワークというのがよくわかってない上に、AWSとかがでてくるとより分からない感じがある。 所謂「地に足がついていない」感覚が抜けないというのが原因だと思っているが、どうしたらいいのか。

ということを社内で話すと、ソケットでネットワークプログラミングをやってみれば?と言われたので、ちょっとだけやった。 とりあえずHTTPリクエストを受け取ってパースした上で、問答無用で決まったレスポンスを返すserverができた。

以下、感想。

思ったよりも学びが多くて良かった。自分はあまり情報やコンピューターサイエンスを勉強せずにゲーム会社に入り、雰囲気でserver(Rails)とclient(Unity)の実装をしていて、 雰囲気でコードを書けば動くという感じだったので、新鮮な気持ちでやれたと思う。TCPとかHTTPとか普段は全然意識しないんだけど、ソケットでやりとりを記述すると、TCPとHTTPはレイヤーが違っていて、HTTPはTCPの上に乗っかっているというのがコードで見えるのが良い。地に足がついている、というのはこういうことを言うのだ!

HTTPとかはclientがserverに送ってくるbyte列の決まり事なので、なくてもserver/clientのやり取りは(独自のプロトコルで)できる、とかも(当たり前なんだと思うが)なるほどという感じだった。HTTPはテキストベースなので、パースも雑にできて楽だったが、MQTTはバイナリでやり取りするのでHTTPの雑なパースよりも大変そう~と思ってやめた。が、仕様をある程度理解できるようになったし、実装を頭の中で考えるとかはできるので良いのではないでしょうか。テキストベースでMQTT(というかPub/Sub)を実装してみても良いかもしれない。

言語はWebサイトに従ってCで書いた。WindowsでもWSLでLinux環境を構築できるので助かる。少し前にC++でレイトレの勉強をしていたというのもあって、写経をする程度ならあんまり困らなかった。というか、困ったときはChatGPTに質問すればサンプルコード付きで教えてくれるのでそれで事足りている。逆にGoogle検索が本当に使えなくなってきていて厳しさを感じる。助けて!

普通に面白かったので、次はUDPというやつもやってみたい。