実装がネットワークを高速化する際のボトルネックになっていることが多々ある。(コンピュータネットワーク- p.568)
このことからネットワークを構築する際には信頼できる OSS を使うのが良いと考えられます。
以下では、有名なネットワークライブラリである boost.asio と libuv について個人的な感想を述べて比較します。
- asio
- 良い点
- c++ のライブラリである。
- なんだかんだで速い。 ここで比較されていた
- 一貫したデザインである。(Actorパターンとか)
- それ故に実は結構わかりやすかったりもする。
- メモリの管理がラク。
- OpenSSL を使用することで SSL/TLS に対応してくれる。
- C++ のネットワークライブラリはだいたい asio をベースにしたり、ラップしたりしている。
- 上位に boost.beast という HTTP(HTTPS)/Websocket のライブラリもできました。
- 次期標準ライブラリのコードだけあってレビューを受け続けAcceptされた経緯がある。
- 悪い点
- Boost というか Template Programming 特有の過度な抽象化による難しさがある。(人によるだろうがおそらく一般的ではない)
- 名前空間の解決 boost::asio:: の時点でかなりコードが長い
- 議論の余地
- 例外を投げることもできれば投げないこともできる。
- 良い点
- libuv
- 良い点
- c のライブラリだけあって速い。
- 低レイヤーのシンプルなクロスプラットフォームラッパーである。
- ポインタとメモリの管理さえしっかりすれば比較的簡単である。
- 悪い点
- SSL/TLS に直接は対応していない。
- スマートポインタのコールバックを利用したりしないとメモリ管理が面倒そう。
- 議論の余地
- c のライブラリである。
- もともとは Node.js のために作られたライブラリであるため、asio のような汎用ライブラリを目指しているわけではない。
- void* をコールバック引数にとるような設計ではないのでグローバルに汚染されないためには工夫が必要。
- 良い点