2011-06-19 6 views
1

私はRMIと集中サーバを使って、Javaでマルチプレイヤー/マルチルームゲーム(ハーツ)を書いています。 しかし、問題があります。クライアントがNattedでファイアウォールされているため、RMIコールバックが動作しません。私は基本的に、クライアントにデータ更新をプッシュするために、サーバーをポーリングを使わずに、ソケットを使わずに置く必要があります。(私はより高いレベルでコードします) この種のアーキテクチャを実現するための最良の解決策は何ですか? ajaxアプリケーションは唯一のソリューションですか?Javaのマルチプレイヤーゲーム。最高のソリューションは何ですか?

+0

これはデスクトップアプリですか、ウェブアプリですか? –

+0

デスクトップアプリです! – Davide

答えて

3

あなたはポーリングをしたくないと言っていますが、AJAXはまさにそれです。 Cometを見ることができますが、とにかくポーリングから脱出することは難しいです(たとえば、Comet自身が下のポーリングを使用します)。

+0

ありがとう!私は一見を与える! PS:私の質問では、ポーリングを避けるためにAJAXに代わる技術があるかどうか尋ねたいと思っていました。たぶん私は誤解されたかもしれません。 :) – Davide

+0

なぜ彗星は下にポーリングを使用していますか?私はそれがちょうど接続を開いて、データを送信するためにそれを使用したと思った - どこにポーリングが入ってくるの? – Voo

+0

@Vooでは、ブラウザが接続をタイムアウトすることがあります。 –

1

JXTAなどのピアツーピアフレームワークを使用できます。

0

私は2つの主なテクニックを提案できます。

  1. サーバーには、クライアントが呼び出し可能なgetUpdatesメソッドがあります。このメソッドは、表示する更新があるときにコントロールをクライアントに返します。

  2. クライアントが登録を実行すると、サーバーにコールバックリモートオブジェクトが割り当てられます このオブジェクトはrmiレジストリに登録されていないため、nattedクライアントに問題はありません。

0

ブラウザベースではないアプリではどのように(if)ajaxが動作するのかよくわかりません。あなたは、接続ごとにスレッドを持つアプリケーションの持続時間の間、あなた自身のSocketConnectionsのプールを開いておくことができます。

多くの同時接続に拡張する必要がある場合は、Apache MinaまたはNetty(関連する投稿:Netty vs Apache MINA)のような非ブロックI/Oフレームワークを参照してください。

関連する問題