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

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

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

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

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

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

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

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

  • Java的标准远程处理选项:RMI或JMS
  • 在每个客户端和服务器中实现JMX Mbeans,并使用JMX远程处理来调用消息传递操作。
  • 如果您认为您可能想要使用多播,我肯定会检查JGroups 。
  • 如果您正在寻找创建自己的协议但想要使用一些现有的构建块,请查看Jakarta Commons Net 。 答案#1中引用的HttpClient已合并到此包中。
  • 还有一些有趣的专有消息系统,它们具有支持Spread和DBus等多种平台/语言的附加优点。
  • 如果不提及WebServices,就无法枚举远程处理选项……但是…… 喋喋不休!

我不完全确定你的消息代码生成是什么意思。 你能详细说说吗?

从apache尝试HttpClient 。

如果您还没有使用Spring,这可能比您正在寻找的方式更多。 但是,HttpInvoker是用于发送消息的相当高级的抽象。 所有远程信息都可在线获取,HTTP Invoker部分位于17.4。

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

  • Thrift – Apache许可证。
  • 冰 – GPL和商业许可证。
  • CORBA – 如果您想要更多选择。

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

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