人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

TCPで持続型接続させ、コネクションの開始・終了のオーバーヘッドを回避する、
メッセージパッシング(データをクライアント・サーバー間でやり取りする)ソフトウェアはありますでしょうか?

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

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

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

●質問者: mogwaing
●カテゴリ:コンピュータ
✍キーワード:API OS TCP UNIX イメージ
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● YasudaS
●20ポイント

ありません。

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

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

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

◎質問者からの返答

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

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

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

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


2 ● YasudaS
●20ポイント

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

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

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

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

◎質問者からの返答

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

例えば、

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

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

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

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


3 ● kurukuru-neko
●20ポイント

接続速度を早くするなら

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

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

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


4 ● ardarim
●20ポイント

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


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


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


参考

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


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


5 ● yoshifumi1975
●20ポイント

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

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ