複数のネットワーク内または複数のネットワークにまたがる異なるマシンに存在する複数のアプリケーションと共有したいシリアル ハードウェア デバイスがあります。重要な要件は、システムが双方向通信をサポートする必要があることです。これにより、クライアント/シリアル デバイスがファイアウォールの背後や異なるネットワーク上に存在し、中央サーバーを介して相互に通信 (送受信) できるようになります。システムのもう 1 つの要件は、ゲートウェイ/シリアル デバイスがオフラインかオンラインかをクライアントが判断できる必要があることです。
このシリアル デバイスは、ワイヤレス ネットワークとの間でパケットを送受信できます。シリアルデバイスと通信するソフトウェアは Java で書かれており、できれば 100% Java ソリューションを維持したいと考えています。
私は現在、Jive ソフトウェアの Openfire サーバーと Smack API を使用して、XMPP を検討しています。このソリューションでは、シリアル デバイスから送信されるパケットが XMPP 経由でクライアントに配信されます。同様に、クライアント アプリケーションは、Smack API を介してシリアル デバイスにパケットを送信できます。パケットは単なるバイト配列であり、サイズは約 100 バイトに制限されているため、16 進文字列に変換して、メッセージの本文でテキストとして送信できます。システムは、クライアント/シリアル デバイスがオフラインになることを許容する必要があります。つまり、再び使用可能になると自動的に再接続されますが、クライアントがオフラインの場合はパケットが破棄されます。パケットはほぼリアルタイムで送受信する必要があるため、オフライン配信は望ましくありません。セキュリティは、メッセージング システムと提供されるクライアント API によって提供される必要があります。
他の可能な解決策を聞きたいです。JMS を使用することを考えましたが、少し重すぎるようで、クライアントやゲートウェイ/シリアル デバイスがオフラインかどうかを知るという要件をサポートするかどうかわかりません。