【问题标题】:Is there a good Java networking library? [closed]有没有好的 Java 网络库? [关闭]
【发布时间】:2009-01-05 18:19:50
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java networking serialization


    【解决方案1】:

    您有多种选择,具体取决于您希望从原始套接字中提取的方式。一旦你离开套接字级编程,你就进入了 remoting 领域,

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

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

    【讨论】:

    • 我需要一个对象来表示实际的消息。 (class Message { getId(); getSender(); ... }) 但是你需要有一个阅读器来将你的数据从一个流和一个流中输入到这个对象中。我想简化这个过程。 Protobuf 可以从消息描述文件中生成读取器/写入器。
    【解决方案2】:

    啊……明白了。 但不是使用代码生成。编组和解组,如果两端都有 Java,可以使用简单的对象序列化吗?如果性能和/或消息大小是一个问题,您可以使您的 Message 类可外部化。

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

    【讨论】:

    • JGroups 看起来很有希望用于传输消息。
    【解决方案3】:

    从 apache 尝试HttpClient

    【讨论】:

      【解决方案4】:

      如果您还没有使用 Spring,那么这可能超出您的预期。但是 HttpInvoker 是用于发送消息的相当高级的抽象。所有remoting information 都可以在线获得,HTTP Invoker 部分位于 17.4。

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

            • 我只是玩了一点 JGroups 和 Java 序列化。看来这就是我要找的东西。谢谢。
            猜你喜欢
            • 2010-09-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多