2008-09-18 67 views
1

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

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

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

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

回答

1

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

如果你想尽可能缩小占用空间,那么应该使用SocketServer,套接字和序列化来传输数据。但是,那么你就失去了你提到的第三方解决方案的所有优点,通常包括可靠性,交付保证,安全性,管理等。

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


更新: 如果你想在最方便的编码,然后我会看看第三方解决方案。看看Smack/XMPP,对于您要求的功能而言,API似乎比JMS容易一些。您仍然需要安装/配置服务器等。

Smack API还有很多额外的包袱,您不需要它们,但其“概念”更直观,因为它的所有聊天/ IM概念。

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

+0

感谢您的回应。我已更新我的帖子以提供更多详细信息。我从帖子中删除了“最低限度”的措词,因为我真正想要的是最低的复杂性/编码工作。 – Andrew 2008-10-05 19:09:26

1

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

在我工作的地方,Jini用于1000台以上机器的基础架构,每台机器都提供用于访问设备的远程服务,连接到机器串行端口。

+0

我会看看Jini。谢谢 – Andrew 2008-10-05 19:10:06

0

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