1

複数のネットワーク内または複数のネットワークにまたがる異なるマシンに存在する複数のアプリケーションと共有したいシリアル ハードウェア デバイスがあります。重要な要件は、システムが双方向通信をサポートする必要があることです。これにより、クライアント/シリアル デバイスがファイアウォールの背後や異なるネットワーク上に存在し、中央サーバーを介して相互に通信 (送受信) できるようになります。システムのもう 1 つの要件は、ゲートウェイ/シリアル デバイスがオフラインかオンラインかをクライアントが判断できる必要があることです。

このシリアル デバイスは、ワイヤレス ネットワークとの間でパケットを送受信できます。シリアルデバイスと通信するソフトウェアは Java で書かれており、できれば 100% Java ソリューションを維持したいと考えています。

私は現在、Jive ソフトウェアの Openfire サーバーと Smack API を使用して、XMPP を検討しています。このソリューションでは、シリアル デバイスから送信されるパケットが XMPP 経由でクライアントに配信されます。同様に、クライアント アプリケーションは、Smack API を介してシリアル デバイスにパケットを送信できます。パケットは単なるバイト配列であり、サイズは約 100 バイトに制限されているため、16 進文字列に変換して、メッセージの本文でテキストとして送信できます。システムは、クライアント/シリアル デバイスがオフラインになることを許容する必要があります。つまり、再び使用可能になると自動的に再接続されますが、クライアントがオフラインの場合はパケットが破棄されます。パケットはほぼリアルタイムで送受信する必要があるため、オフライン配信は望ましくありません。セキュリティは、メッセージング システムと提供されるクライアント API によって提供される必要があります。

他の可能な解決策を聞きたいです。JMS を使用することを考えましたが、少し重すぎるようで、クライアントやゲートウェイ/シリアル デバイスがオフラインかどうかを知るという要件をサポートするかどうかわかりません。

4

3 に答える 3

1

ジニはその仕事に合うかもしれません。マルチキャストが利用可能な分散環境で非常にうまく機能しますが、ユニキャストでも機能し、非常に高速です。リモート サービスだけでなく、必要に応じてリモート イベントや分散トランザクションも提供します。欠点は、Java でしか動作しないことです。

私が働いている場所では、Jini は 1000 台以上のマシンを持つインフラストラクチャで使用されており、各マシンはマシンのシリアル ポートに接続されたデバイスへのアクセスに使用されるリモート サービスを提供しています。

于 2008-10-03T10:25:15.703 に答える
1

あなたは本当にもう少し詳細を提供する必要があります.クライアントは配達を保証する必要がありますか? オフライン配信はどうですか?これはより大きなシステムの一部ですか?暗号化は必要ですか?安全?

可能な限り最小のフットプリントが必要な場合は、SocketServer、ソケット、およびシリアライゼーションを使用してデータを送信する必要があります。ただし、通常、信頼性、配信保証、セキュリティ、管理などを含む、あなたが言及したサードパーティ ソリューションのすべての利点が失われます。

私は個人的に JMS を使用しますが、それは私がそれに慣れているからです。実質的に構成なしですぐに使用できるスタンドアロン サーバーが多数あります。それらはすべて、保証された配信、ある程度のセキュリティ、暗号化、およびその他の多くの使いやすい機能を提供します. JMS パブリッシャーまたはサブスクライバーのコーディングは非常に簡単です。


更新:コーディングを最も簡単にしたい場合は、サードパーティのソリューションを検討します。Smack/XMPP を見ると、API は、要求された機能について JMS よりも少し簡単に見えます。サーバーなどをセットアップ/構成する必要があります。

Smack API にも必要のない余分な荷物がたくさんありますが、その「概念」はすべてチャット/IM の概念であるため、もう少し直感的です。

私はまだOpenJMSまたはActiveMQを検討します。JMS を知ることは、XMPP を知ることよりも将来的に価値があると思います。Getting StartedのドキュメントまたはSun のチュートリアルを参照して、コーディングの量を確認してください。JMS 用語では、管理された「トピック」と「キュー」が必要になります。ここで、シリアル ポート アプリはそれぞれメッセージを送受信します。すべてのクライアントがトピックへのサブスクリプションを開き、アウトバウンド メッセージをキューに送信します。メッセージを送信する場合、配信モードは非永続的である必要があります。

于 2008-09-19T15:45:09.997 に答える
0

Smack API経由でXMPPを使用することになりました。この決定に至ったのは、プレゼンス (クライアントがオンライン/オフライン) と堅牢な接続処理 (基になる接続が切断された場合に自動的に再接続する) のネイティブ サポートです。XMPP のもう 1 つの利点は、Google トークと互換性があるため、サーバーをセットアップする必要がないことです。提案をありがとう。興味のある方のために、Google Code http://code.google.com/p/xbee-xmpp/でコードを公開しました。

于 2009-02-03T19:36:28.287 に答える