有一个很好的Java网络库吗?

时间:2009-01-05 18:19:50

标签: java networking serialization

我目前正在搜索Java网络库。我想要做的是将XML,JSON或其他序列化消息从客户端发送到另一个客户端和/或客户端到服务器。

我的第一次尝试是为每条消息创建一个POJO,另外还有一个用于发送的MessageWriter和一个用于接收它的MessageReader。加上套接字和错误处理。这是一个很容易出错的工作。

我正在寻找的是一个从套接字中抽象出来的更高级别的库。此外,它应该支持诸如消息的代码生成之类的东西。

Google的协议缓冲区(http://code.google.com/apis/protocolbuffers/)看起来很有前途。但有其他选择吗?重点不在于速度或安全性(目前),它应该是可靠的,并且实施时间很短。

7 个答案:

答案 0 :(得分:13)

根据您希望获得的原始套接字的抽象方式,您有多种选择。一旦你离开套接字级编程,你就会进入远程领域,

  • Java的标准远程处理选项:RMI或JMS
  • 在每个客户端和服务器中实现JMX Mbeans,并使用JMX远程处理来调用消息传递操作。
  • 如果您认为您可能想要使用多播,我肯定会检查JGroups
  • 如果您要创建自己的协议但想要使用某些现有构建基块,请查看Jakarta Commons Net。答案#1中引用的 HttpClient 已合并到此软件包中。
  • 还有一些有趣的专有消息传递系统,可以支持多种平台/语言,例如SpreadDBus
  • 如果不提及Web服务,就无法枚举远程处理选项....但.... blech!

我不完全确定消息代码生成的含义。你能详细说明吗?

答案 1 :(得分:4)

啊......抓住了。 而不是使用代码gen。如果两端都有Java,你可以使用简单的对象序列化来编组和取消编组吗?如果要考虑性能和/或消息大小,可以使Message类可外部化。

之前我没有看过Protobuf。看起来很体面。使用它,您只需要一个传输方法。

答案 2 :(得分:3)

从apache尝试HttpClient

答案 3 :(得分:2)

如果你还没有使用Spring,这可能比你想要的更多。但HttpInvoker是发送消息的相当高级别的抽象。所有remoting information都可在线获取,HTTP Invoker部分位于17.4。

答案 4 :(得分:0)

如果您喜欢这些功能,您可能还需要查看JBossCache。它是使用JGroups实现的,虽然您的要求不是缓存解决方案,但它通过基本实现带有事件通知等的分布式哈希映射,确实很好地抽象了JGroups的一些显着功能。

答案 5 :(得分:0)

IDL(接口描述语言的变体)基于语言中立(某种)网络库/框架:

  • Thrift - Apache许可证。
  • Ice - GPL和商业执照。
  • CORBA - 如果您想要更多选择。

答案 6 :(得分:0)

我建议您查看ActiveMQ以传递消息。它简单,灵活,快速。它支持Serializable对象,但也支持Map消息和其他JMS消息类型,因此除非效率很重要,否则您不需要自己的序列化格式。如果性能很重要,我建议使用Hessian,它非常快,不需要代码生成。