TCPで持続型接続させ、コネクションの開始・終了のオーバーヘッドを回避する、

メッセージパッシング(データをクライアント・サーバー間でやり取りする)ソフトウェアはありますでしょうか?

内部的には、socketを使ったプロセス間通信なのですが、コネクションを開きっぱなしにして、
通信の効率化を図ろうとしてるものを探しています。
(複数プロセス・複数台構成でこれをやると、OSリソースがかなり使われるので、
その辺を工夫してるソフトウェアがあれば尚好ましいです。)

ユーザは簡単なAPIを呼べば、内部的に上記の
機能を行ってくれるようなもの(ライブラリ)を
イメージしています。

プラットフォームはunix系でお願いします。
有償・無償(オープンソース)でも構いませんので、ご教授ください。

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:
  • 終了:2006/09/30 20:00:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:YasudaS No.1

回答回数351ベストアンサー獲得回数5

ポイント20pt

ありません。

http://support.microsoft.com/default.aspx?scid=kb;ja;170359

TCPのタイムアウトはクライアントにも依存するからです。

相手側のタイムアウトをいじるといったAPIを作ると、それはクラッキングとも言えます。

id:mogwaing

上述のような、持続型接続を使ったソフトウェアはありますか?という質問です。

なので、コネクションを開きっぱなしで通信してるのはソフトウェア内での話です。

通信の部分はそのソフトウェアが肩代わりしてくれていて、

利用者はそのソフトウェアが提供するAPIを使うことにより、クライアントとサーバーを簡単に作ることができるといったイメージです。

2006/09/23 23:21:28
id:YasudaS No.2

回答回数351ベストアンサー獲得回数5

ポイント20pt

>上述のような、持続型接続を使ったソフトウェアはありますか?という質問です。

>socketを使ったプロセス間通信

...すいません、TCP/UDPって知っていますか?

http://www.net-newbie.com/tcpip/

id:mogwaing

まだ勘違いされているようですね。

例えば、

クライアントマシンが5台、各マシンにapacheが20プロセスあって、IDの認証サーバーが3台、5プロセスずつ存在するような場合、それぞれでコネクションを張ると1500本必要だけど、各マシンに通信用の常駐プロセスをおいておけば、15本のコネクションで済む。そういう機能をアプリケーション側で毎回作り込むのは非効率なんで、そういうのを

提供してるソフトウェアを探してるってことです。

(もちろん、クライアントプロセスと常駐プロセス間でなんらかのプロセス間通信が必要で、その部分もそのソフトウェアで提供されてる必要がある。)

ここまで言わないとだめなんですね。。

2006/09/24 01:13:55
id:kurukuru-neko No.3

回答回数1844ベストアンサー獲得回数155

ポイント20pt

接続速度を早くするなら

コネクションプールと呼ばれるものと思いますが。

汎用は難しいと思います。

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

id:ardarim No.4

回答回数897ベストアンサー獲得回数145

ポイント20pt

unix系は詳しくないのですが。


TCPで実装されている持続型通信というと有名なものではHTTP/1.1のKeep-alive通信があると思います。これはまさにコネクションを開きっぱなしにして、TCPコネクション確立/切断に要するサーバ/クライアント負荷を軽減させる目的で規定されているものです。


ただしAPIという形のものではないので、webサーバやブラウザのソースコードを参考に自分で実装することになると思います。


参考

http://e-words.jp/w/HTTP20Keep20Alive.html


...自分で読み返してみてあんまり参考にならなそうなのでポイントはなくてもいいです。

id:yoshifumi1975 No.5

回答回数58ベストアンサー獲得回数10

ポイント20pt

IBMのMQや、JavaのJMS等のメッセージキューじゃあ駄目なのでしょうか。

TCPでコネクション張りっぱなしという要件は満たしていませんが、クライアント・サーバー間のメッセージのやり取りを非同期に行えます。

それでも、TCPコネクション張りっぱなしが必要なら、簡単なラッパークラスでも作成して、コネクションをプーリングすればいいのではないでしょうか。

http://www.hellohiro.com/jmsptp.htm

http://www-06.ibm.com/jp/software/websphere/bi/ai/mq/mq/

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません