2008-09-18 4 views
1

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

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

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

可能な解決策についてお聞きしたいと思います。私はJMSを使用することを考えましたが、それはちょっと重すぎるようです。クライアントやゲートウェイ/シリアルデバイスがオフラインかどうかを知る必要があるかどうかは分かりません。

答えて

1

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

最小のフットプリントを可能にするには、SocketServer、Sockets、およびシリアル化を使用してデータを送信する必要があります。しかし、あなたは、信頼性、配送保証、セキュリティ、管理などを含むサードパーティのソリューションの利点をすべて失います。

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


更新: あなたは、コードの中で最も容易にしたい場合は、私は、サードパーティのソリューションになります。 Smack/XMPPを見ると、あなたが求めていた機能のために、APIがJMSよりもやや簡単に思えます。あなたはまだサーバーなどをセットアップ/設定する必要があります。

Smack APIには、必要のない余分な手荷物もたくさんありますが、その「概念」はすべてのチャット/ IM概念。

私はまだOpenJMSまたはActiveMQを見ます。私は、JMSがXMPPを知ることと比較して将来的にはより価値があることを知っていると思います。 Getting StartedのドキュメントまたはSun Tutorialを参照して、どの程度のコーディングが行われているかを確認してください。 JMS用語では、シリアルポートアプリケーションがそれぞれメッセージを送受信する管理対象の「トピック」と「キュー」が必要です。あなたのすべてのクライアントはトピックへの購読を開き、発信メッセージをキューに送信します。メッセージを送信するとき、その配信モードは非永続的でなければなりません。

+0

ありがとうございました。私はいくつかの詳細を提供するために自分の投稿を更新しました。私が本当に欲しいのは、最低の複雑さ/コーディング努力であるから、ポストから「最低のフットプリント」の言葉を削除しました。 – Andrew

1

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

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

+0

私はジニーを見ていきます。ありがとう – Andrew

0

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

関連する問題