なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

C++でクロスプラットフォームなネットワーク用ライブラリ

そんなお題でStackOverflowの質問スレッドが立ってる。bump! bump!...

Stackoverflow - C++ sockets library for cross-platform

けち臭いStackoverflowはライブラリの比較を禁止にした。おかげでそのエントリは削除されてしまったので、archiveへのリンクを載せておく。


以下は ACE, Boost, Pocoの比較

c++ - ACE vs Boost vs POCO - Stack Overflow




出てきたライブラリとか、それ以外を並べてみる

ライブラリ URL 一言コメント
boost::asio Boost.Asio - 1.64.0 ・バイナリ配布しない&C++ならBoost使って当たり前じゃん?って方はこれで。
C++のほとんどの仕事はSTLとBoostで事足りる
・これだけのためにboost使うのはちょっと…という方は回れ右
・バイナリがデカすぎる、boostのasio部分だけ分離できないのか?
・鶏を割くに焉んぞ牛刀を用いん
cpp-netlib cpp-netlib: The C++ Network Library ・boost::asioを更にラップしたものみたいだ
SSL対応
・実用的なのかどうかはよくわからん
ACE The ADAPTIVE Communication Environment (ACE) ・一応クライアント用も書けるけど、基本サーバサイドのライブラリ
・鶏を割くに焉んぞ牛刀を(ry
・いつかは使ってみたいライブラリの一つ。こういうフレームワークを使って巨大なシステムを構築するんでしょうね、Corbaというワードから古臭さが出てる。
Qt http://qt.digia.com/ ・Qtでアプリケーション使っているならばQtの手厚いネットワークサポートがあるはずです
残念だけど俺はwxWidgets派なんだ
wxWidgets wxWidgets: Cross-Platform GUI Library ・ネットワーク処理は微妙に貧弱
・メインのクラスとなるwxHttpにはproxyサポートがない(wxHttp::SetProxyは名前だけあるけどprotectな仮想関数なので使えない)
・HTTP GETだけならまあ使える
・wxSocketClientでPOST処理も書けるけどコードが汚くなる
SSLは対応してない
wxCurl wxCode - wxCURL curlに依存するのがちょっと嫌かも…Makefile.amが異常に複雑
・というかそれはCurlだよな
・Proxyに対応してない
SSLも対応してない
C++ Sockets http://www.alhem.net/Sockets/index.html ・依存関係も少ないしなんかよさげ
・構造的にMinGWでのビルドができない
POCO C++ Libraries Overview | POCO C++ Libraries ・これもよく聞くけど、ネットワーク限定じゃなくてC++の総合的なライブラリどちらかと言うとサーバサイド?
commonc++ hyperrealm.com - commoncpp C++の総合的なライブラリみたい、ネットワークはおまけか
YAMI4 Inspirel - YAMI4 ・名前からして面白げ、peer-to-peerという文字が見えるが
性能の低いデバイス(組み込み系ね)でも使えるのが売りらしい
CLX C++ Libraries CLX C++ Libraries ・ヘッダファイルだけで構成されたライブラリ、日本人が作ったみたい。いろいろできるらしいが…
ØMQ Distributed Messaging - zeromq ・zmq同士でしか通信できない
・独自フレームワークのアプリ内の通信に使われているのを見たことがある
・というか最近使った
・通信をプールさせたりキューに詰めたりできる
・単純なHTTP通信用ライブラリではない
librascal Faerion — librascal ・ロシア製のしっかりとしたクロスプラットフォームのソケットライブラリ
・残念なことにそこまで多機能ではない
Endpoint C++ Socket Library Endpoint クロスプラットフォームC++ソケットライブラリ
・開発止まってる
LiON LiON - Lundman Wiki ・よさげに見えるがこれはC++ではなくCだな
SSLが手軽に使えそうなのはよかった
libwww Libwww - the W3C Sample Code Library ・これを忘れていた
w3cのライブラリ、PerlのLWPで有名
・そういやlibwww + wxWidgets = Amayaでした
libcurl curl C言語使いの場合これがおすすめ
curlはlibwwwの代替だったらしい。事実、libwwwの開発は止まっている。libcurlを使おう
・これもまたデカイライブラリである
curlpp Google Code Archive - Long-term storage for Google Code Project Hosting. ・私のおすすめ
CurlC++バインディング
SSL対応、Proxy対応、GET,POST,DELETEとかいろいろ対応
・boostを混ぜて使えるらしい
libsoup Projects/libsoup - GNOME Wiki! GNOME系の通信用ライブラリ、普通に高性能
・ただしglibに依存する
Linux限定ならこれでいいかも
neon neon HTTP and WebDAV client library C言語だけど高性能、いい感じ
・HTTP/WebDAV operations (GET, MOVE, DELETE, etc)対応
SSL対応

感想

やはりC++ Sockets, ØMQどちらかが良さげか

追記1

hogeさんの言うとおりならば選択肢はcurl + curlppかなあ

追記2

libneonを追加

追記3

cpp-netlibを追加

追記4

0mqについてのコメントを追加