読者です 読者をやめる 読者になる 読者になる

boost::asio VS 古典的ソケットプログラミング

 とある動機から、簡単な非同期のクライアント・サーバー型プログラムを書くことになったのだが、boost::asioを今までまともに使っていなかったなと思い少し調べてみた。

 最初触った感想は、古典的ソケットプログラミングでクライアントサーバー型だろうがNAT超えP2Pだろうが実装してきたしできるからasioの作法覚えるのメンドクセ・・・というものだったが、非同期通信の実装例としてboostライブラリに用意されているchat_serverとchat_clietのサンプルを見てみると、非同期通信がかなりシンプルかつわかりやすく実装できていいなと思い始める。

 古典的ソケットプログラミングも慣れて色々出来ると、asioで通信の設定等をどのようにいじるのが正解なのか、探したり覚えたり使ったりするのが非常に面倒に感じるが、上記サンプルを眺めていると、そうでもないかなと思えた。

 asioの使い勝手を一言で言うと、比較的抽象化されたインターフェイスや、bind等を使って今どきのプログラミングっぽく通信処理が書ける、というところだろうか。個人的にはC++をベターCとして使い、WinsockAPIやスレッド(これはboostを使う)をチマチマ用意して目的の処理を書くスタイルも、具体的になにを設定して何を行おうとしているのかが直接コードに表れていて好きといえば好きだが、C++の流儀としては一度そういう手法が確立したのならそいつは一旦実装に隠蔽して、プログラマは手順が抽象化されたインターフェイスを覚えるだけでモノが作れるようにしな、となるのだろうし、ライブラリのユーザーに徹するだけなら悪くない。

 こういうことグダグダ考えても結局覚えるんだから無駄だとは思いつつもまたグダグダ考えてしまった。