我有一个串行硬件设备,我想与多个应用程序共享,它可能驻留在多个网络内或跨越多个网络的不同机器上。一个关键要求是系统必须支持双向通信,以便客户端/串行设备可以存在于防火墙后面和/或不同的网络上,并且仍然通过中央服务器相互通信(发送和接收)。系统的另一个要求是客户端必须能够确定网关/串行设备是否离线/在线。
该串行设备能够接收和发送数据包到无线网络。与串行设备通信的软件是用 Java 编写的,如果可能的话,我希望它保持 100% Java 解决方案。
我目前正在研究 XMPP,使用 Jive 软件的 Openfire 服务器和 Smack API。使用此解决方案,来自串行设备的数据包通过 XMPP 传递给客户端。类似地,任何客户端应用程序都可以通过 Smack API 向串行设备发送数据包。数据包只是字节数组,大小限制在 100 字节左右,因此可以将它们转换为十六进制字符串并作为消息正文中的文本发送。系统应该容忍客户端/串口设备离线,这意味着当它们再次可用时它们会自动重新连接,但如果客户端离线,数据包将被丢弃。数据包必须近乎实时地发送和接收,因此不希望离线传递。安全性应由消息传递系统和提供的客户端 API 提供。
我想听听其他可能的解决方案。我想过使用 JMS,但它似乎有点过于重量级,我不确定它是否支持了解客户端和/或网关/串行设备是否离线的要求。