0

Javaクライアントにサーブレットを使用した双方向のデータチャネルを持たせたいという状況があります(両方を制御できます)。これにより、どちらかが最初に何かを行うのを待たずにデータ転送を開始できますが、ファイアウォールを通過するには、httpまたはhttpsでトンネリングする必要があります。

私は周りを見回しましたが、Googleに尋ねる正しい条件を知っているとは思いません。

私はもともとhttpトンネリングモジュールを見ていましたが、もう一方の端にWebコンテナがあることに気付いたので、ファットクライアントが自宅と通信する必要があると考えるのが適切な方法だと思います。ここでは、http1.1の永続的な接続が非常に役立つのではないかと考えていました。ハートビート転送を簡単に実行して、接続がアイドリングにならないようにすることができます。

この時点では、概念実証を行う必要があるだけなので、主に現在機能するものが必要です。これは、最適化するか、後で置き換えることもできます。

したがって、どちらの側も情報(シリアル化されたオブジェクトやバイトの記述ストリームなど)を反対側にプッシュできる接続を可能にするプロジェクトへのポインターをいただければ幸いです。可能であれば、純粋なJavaを使用したいと思います。


編集:ポインタをありがとう。私が必要としているものは、サーブレット3.0仕様で利用できるようです。これは、さまざまなWebコンテナーでいつサポートされるかによっては、長期的に使用することになります。

今のところ、Cometdパッケージを調査しています。これは、プロトタイプに必要なことを正確に実行できるようです。

4

5 に答える 5

1

検索用語:彗星、ロングポーリング

これらは主にAJAXコンテキストで使用されますが、Javaプロジェクトで使用できなかった理由はわかりません。

于 2009-09-09T09:10:49.097 に答える
1

EclipseNet4Jをご覧ください。

http://wiki.eclipse.org/Net4j

それはあなたが言及したすべての機能をサポートします。特別な優れた機能は、HTTP接続プーリングをサポートしているため、クライアントとサーバー間に多くのチャネルを設定できますが、使用するHTTP接続はごくわずかです。

唯一の問題は、ドキュメントがまったくないことです。ソースコードを読むだけです。一度理解すれば、とても使いやすいです。

古いNet4Jサイトには、さらにいくつかの図があります。

http://net4j.berlios.de/

于 2009-09-09T12:00:14.523 に答える
0

通常、これはサーバーがhttpリクエストにすぐに応答しないようにすることで行われます。応答を送信する前に、更新(またはタイムアウト)を待機します。明らかに、サーバーが負荷の下でこれを処理することを保証するために、いくらかの注意を払う必要があります。

たとえば、Cometを参照してください。

于 2009-09-09T09:15:14.830 に答える
0

どれくらい速くする必要がありますか?いつでもクライアントでポーリングを行うことができます。頻繁に新しいメッセージをチェックしてください。

于 2009-09-09T09:08:47.383 に答える
0

HTTP経由でHessianプロトコルを使用できます。これは、データをシリアル化するための高速なバイナリプロトコルです。通常、WebサービススタイルのRPC通信に使用されますが、双方向にできない理由はありません。Hessianmuxを参照してください。純粋なJavaでもあります:-)

于 2009-09-09T09:09:48.427 に答える