2017/06/21

[linux]ほどよい通信用ライブラリはないだろうか?

ずっとやっている、Linuxでソケット通信でマルチスレッドなのがうまくいかないシリーズ。

安定してきた気はするものの、あっちでmutexのlock競合、こっちでlockとlockの隙間に割り込まれる、など、自分のまぬけな実装が目に余る次第だ。

こういうのって、MQTTのときにpahoを使ったように、ほどよいライブラリがないものだろうか?


似たような質問があった。
Best C/C++ Network Library - Stack Overflow

いいねぇ、君。
しかし、多いよ! この人が挙げただけでこんなにあるのか。
3年前だから、今だとまだあるのかもしれん。


自分が作っていたライブラリの部分はCで書きたいのだけど、通信とかアプリの部分はC++でもよい。
そうなると、ここの全部が選択できる対象になってしまうのだ。

使ったことがあるのは、POCOとlibcurlくらいか。
今回はTCPでプロトコルを作るので、libcurlはそぐわないと思う。
POCOはえらく多機能だった記憶があるくらいだ。
ここから見てみるか。

POCO C++ Libraries - Reference Library
うわあ、なんでもあるわ、この子。。。
普段の組込みライブラリからすると、目が回りそうだ。
Socketも使えるようだし、サーバもやってくれるようだから、これで事足りそうな気もする。


いや、待て・・・。
こんだけ便利なライブラリがあるのだから、逆に今回みたいに特定用途に特化したライブラリもあるのかもしれない。

いろいろ考えたが、これってP2Pというやつでよいんじゃなかろうか。
相手から受け付けるし、相手にも接続を求めるし、でも接続関係は1対1だし。


P2P library for C++ - Stack Overflow

一番上はlibtorrentだが、これはbittorrentの実装らしいから、汎用P2Pではないのだろう。
boost-asioは、P2Pで使うと便利だよ、ということかな。
libboostって、15年前くらいに見てそれっきりだな・・・。


その次のlibniceも、RFC5245の実装などと書いてあるから、特定のP2P実装なのだろう。
MsgConnectというミドルウェアも紹介されていたが、これは製品のようだ。
うーむ。


いや、これは私の考え方が悪かったようだ。
P2Pのフレームワークが欲しい、といった場合、だいたいは「P2Pのネットワークが欲しい」と思うだろう。
やりたいことは、P2Pで何かをする、であって、P2P環境を作るための何か、ではないのだ。


とすると、やはり最初に載せたC/C++の通信ライブラリと、何かスレッド間通信を便利にするライブラリを組み合わせるのがよいということだろうか。

定番が見つけにくい分野って、大変ですわ。。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。