メッセージパッシング(データをクライアント・サーバー間でやり取りする)ソフトウェアはありますでしょうか?
内部的には、socketを使ったプロセス間通信なのですが、コネクションを開きっぱなしにして、
通信の効率化を図ろうとしてるものを探しています。
(複数プロセス・複数台構成でこれをやると、OSリソースがかなり使われるので、
その辺を工夫してるソフトウェアがあれば尚好ましいです。)
ユーザは簡単なAPIを呼べば、内部的に上記の
機能を行ってくれるようなもの(ライブラリ)を
イメージしています。
プラットフォームはunix系でお願いします。
有償・無償(オープンソース)でも構いませんので、ご教授ください。
ありません。
http://support.microsoft.com/default.aspx?scid=kb;ja;170359
TCPのタイムアウトはクライアントにも依存するからです。
相手側のタイムアウトをいじるといったAPIを作ると、それはクラッキングとも言えます。
>上述のような、持続型接続を使ったソフトウェアはありますか?という質問です。
>socketを使ったプロセス間通信
...すいません、TCP/UDPって知っていますか?
まだ勘違いされているようですね。
例えば、
クライアントマシンが5台、各マシンにapacheが20プロセスあって、IDの認証サーバーが3台、5プロセスずつ存在するような場合、それぞれでコネクションを張ると1500本必要だけど、各マシンに通信用の常駐プロセスをおいておけば、15本のコネクションで済む。そういう機能をアプリケーション側で毎回作り込むのは非効率なんで、そういうのを
提供してるソフトウェアを探してるってことです。
(もちろん、クライアントプロセスと常駐プロセス間でなんらかのプロセス間通信が必要で、その部分もそのソフトウェアで提供されてる必要がある。)
ここまで言わないとだめなんですね。。
接続速度を早くするなら
コネクションプールと呼ばれるものと思いますが。
汎用は難しいと思います。
PostGreSQLだとpgpoolや、以下のような専用DSpace等
各ソフト専用にあります。
ただ例であげている通信経路を多重化する技術と、
socketの高速化させるではだいぶ違いものと
思います。
特に通信経路の多重化は、非常に難しい。
(順序制御、帯域制御、障害制御)
実現するにしてもVPNのような常駐プロセスタイプ、
又はレイヤ4スイッチングのような技術のような気がします。
http://ultramonkey.jp/papers/lvs_tutorial/html/
http://www.vergenet.net/ipvs/software/
多くのロードバランーサーは、レイヤ4-7スイッチに対応。
ほぼワイヤースピードで処理ができるのでソフトでは
勝負にならない。
クラスタ/Grid通信技術用としては
http://www.softek.co.jp/CID/Product_S/20010711a2.html
================================================-
http://www.php.gr.jp/seminar/20040821/phpcon2004-light-1.pdf
http://www.nii.ac.jp/metadata/irp/dspace-docs-jp_1_3/index.html
unix系は詳しくないのですが。
TCPで実装されている持続型通信というと有名なものではHTTP/1.1のKeep-alive通信があると思います。これはまさにコネクションを開きっぱなしにして、TCPコネクション確立/切断に要するサーバ/クライアント負荷を軽減させる目的で規定されているものです。
ただしAPIという形のものではないので、webサーバやブラウザのソースコードを参考に自分で実装することになると思います。
参考
http://e-words.jp/w/HTTP20Keep20Alive.html
...自分で読み返してみてあんまり参考にならなそうなのでポイントはなくてもいいです。
IBMのMQや、JavaのJMS等のメッセージキューじゃあ駄目なのでしょうか。
TCPでコネクション張りっぱなしという要件は満たしていませんが、クライアント・サーバー間のメッセージのやり取りを非同期に行えます。
それでも、TCPコネクション張りっぱなしが必要なら、簡単なラッパークラスでも作成して、コネクションをプーリングすればいいのではないでしょうか。
上述のような、持続型接続を使ったソフトウェアはありますか?という質問です。
なので、コネクションを開きっぱなしで通信してるのはソフトウェア内での話です。
通信の部分はそのソフトウェアが肩代わりしてくれていて、
利用者はそのソフトウェアが提供するAPIを使うことにより、クライアントとサーバーを簡単に作ることができるといったイメージです。