0

私のシナリオでは、クライアントが接続を確立するのを待機するサーバーを実行しています。通信しようとしているコンピューターのネットワークセキュリティは私よりも制限されているため、クライアントが接続をインスタンス化する必要があります。クライアントは毎日私に接続します。だから私はこれを処理するjarファイルとプロセスを実行しています。私の側はサーバー側、もう一方の側はクライアント側です。次に、Webページを実行していて、ユーザーが特定のボタンをクリックしたときに、サーバーアプリに「OK、クライアントにデータを送信します」と伝える必要があります。

これを達成するための最良の方法は何ですか?まず、クライアントがデータを待っていることに問題がありますか?ここでハートビートなどの特別なものが必要ですか?シナリオを逆にして、代わりにサーバーをクライアントに接続することは可能ですか?

次に、ユーザーがボタンをクリックしたときに起動するアプリケーションが、接続を処理しているすでに実行中のjarと実際に通信するようにするにはどうすればよいですか?

4

2 に答える 2

0

クライアント/サーバー通信は、RESTfulWebサービスを介して簡単に実現できます。また、同じローカルマシン上のアプリケーション間の通信は、ソケットと共通の通信プロトコルを使用して簡単に実現できます。

于 2012-09-14T15:45:44.323 に答える
0

必要なのは、トランスポート層を決定することです。RMIを使用する場合(通信のすべてのエンドポイントでJavaを使用する場合は理にかなっています)、heatbeatなどは必要ありません。

Webアプリのコンテキスト(Springを使用していますか?)で、RMIオブジェクトを初期化し、RMIレジストリで公開して、クライアントがそれに接続できるようにする一意のインスタンスを定義する必要があります。

このオブジェクトはwebappプロセス(およびwebappクラスローダー)内で作成されるため、使用するキューオブジェクトにアクセスできます。次に、Webアプリはそのキューにアイテムを追加できます。

RMIオブジェクトは別のスレッドで実行する必要があり(Java EEで無差別なスレッドを作成しないでください。1つだけ!またはQuartzとしてフレームワークを使用してください)、ブロッキングキューから消費します。

[webapp]
   configfile
   create thread with server object
      publish server object with getinfo method
      getinfo method consumes from queue (queue.take())


[client]
    connect via RMI to server object
    call method get info

クライアントが新しいアイテムを読み取らずに多くのことを続けることができ、クライアントがたくさんある場合は、アイテムがない(またはタイムアウトする)キューからnullを返す価値があるかもしれません。

于 2012-09-14T14:42:32.553 に答える