串行硬件设备的消息传递解决方案

时间:2008-09-18 18:39:38

标签: java hardware messaging xmpp

我有一个串行硬件设备,我想与多个应用程序共享,这些应用程序可能位于多个网络内或跨越多个网络的不同计算机上。关键要求是系统必须支持双向通信,使得客户端/串行设备可以存在于防火墙后面和/或不同网络上,并且仍然通过中央服务器相互通信(发送和接收)。系统的另一个要求是客户端必须能够确定网关/串行设备是否脱机/在线。

此串行设备能够接收和发送数据包到无线网络。与串行设备通信的软件是用Java编写的,如果可能的话,我想保留100%的Java解决方案。

我目前正在使用Jive软件的Openfire服务器和Smack API查看XMPP。使用此解决方案,来自串行设备的数据包将通过XMPP传送到客户端。类似地,任何客户端应用程序都可以通过Smack API将数据包发送到串行设备。数据包只是字节数组,大小限制在100字节左右,因此它们可以转换为十六进制字符串,并作为文本发送到消息正文中。系统应该能够容忍客户端/串行设备脱机,这意味着它们会在再次可用时自动重新连接,但如果客户端处于脱机状态,则会丢弃数据包。必须几乎实时地发送和接收分组,因此不需要离线传送。安全性应由消息传递系统和提供的客户端API提供。

我想听听其他可能的解决方案。我想过使用JMS,但它似乎有点太重量了,我不确定它是否支持了解客户端和/或网关/串行设备是否脱机的要求。

3 个答案:

答案 0 :(得分:1)

您真的需要提供更多细节......客户需要保证交付吗?离线发货怎么样?这是更大系统的一部分吗?你需要加密吗?安全

如果您希望尽可能减小占用空间,则应使用SocketServer,Sockets和序列化传输数据。但是,您失去了您提到的第三方解决方案的所有优势,通常包括可靠性,交付保证,安全性,管理等。

我个人会使用JMS,但那是因为我对它很熟悉。有许多独立的服务器可以开箱即用,几乎没有配置。它们都提供有保证的交付,一些安全性,加密和许多其他易于使用的功能。编写JMS发布者或订阅者非常简单。


更新: 如果您想要最轻松的编码,那么我会看看第三方解决方案。看看Smack / XMPP,API似乎比JMS更容易实现您所要求的功能。您仍然需要设置/配置服务器等。

Smack API还有许多你不需要的额外包袱,但它的“概念”因为它的所有聊天/ IM概念而更加直观。

我仍然会看OpenJMSActiveMQ。我认为,与了解XMPP相比,了解JMS将来会更有价值。查看他们的Getting Started文档或Sun Tutorial,了解涉及的编码量。在JMS用语中,您将需要一个管理的“主题”和一个“队列”,其中串行端口应用程序将分别接收和发送消息。您的所有客户都将打开主题订阅并将其出站消息发送到队列。发送邮件时,其传递模式应为非持久性。

答案 1 :(得分:1)

杰尼可能适合这份工作。它在多播可用的分布式环境中运行良好,但它也可以单播运行,并且速度非常快。它不仅提供远程服务,还提供远程事件和分布式事务(如果需要)。缺点是它只适用于Java。

在我工作的地方,Jini用于拥有超过1000台机器的基础设施中,每台机器提供用于访问设备的远程服务连接到机器串行端口。

答案 2 :(得分:0)

我最终通过Smack API使用XMPP。导致我做出这个决定的原因是它对存在的原生支持(是客户端在线/离线)和强大的连接处理(如果底层连接中断,它会自动重新连接)。 XMPP的另一个好处是它与Google Talk兼容,因此我不需要设置服务器。谢谢你的建议。如果有人有兴趣,我已经在Google代码http://code.google.com/p/xbee-xmpp/

上发布了代码