【问题标题】:Are there any Java binary protocols that are faster than RMI? [closed]有没有比 RMI 更快的 Java 二进制协议? [关闭]
【发布时间】:2013-03-21 03:35:13
【问题描述】:

RMI 是二进制网络协议的王者(速度方面),还是有其他具有更高基准速度的协议?

是否可以使用 Netty 之类的东西来构建我自己的更快的二进制 (TCP) 协议?我是网络新手,并试图围绕可用的各种库和框架进行思考。提前致谢!

【问题讨论】:

  • 如果您是“网络新手”,那么您肯定不想构建自己的协议!
  • 在故障排除时能够阅读消息是有好处的。

标签: java networking rmi netty binary-data


【解决方案1】:

RMI 需要处理元数据并且它使用反射。如果您实现基于 TCP 和 DataOutputStream / DataInputStream 的自定义协议,它可能会比 RMI 更快。

假设我们有一个 RMI 服务

 Service srv = (Service) Naming.lookup(lookupString);
 srv.sayHi("Jack");
 srv.sayBye("Back");

我们也可以直接通过 TCP 连接发送命令和参数

 ObjectOutputStream out = ...
 out.write(0);  // 0 - Hi command 
 out.writeUTF("Jack");
 out.write(1);  // 1 - Bye command
 out.writeUTF("Jack");

【讨论】:

  • 谢谢@Evgeniy Dorofeev (+1) - 请在 Charles Forsythe 的回答下方查看我的问题 - 我有同样的问题要问你!
  • 更准确地说,对象序列化使用反射,而 RMI 使用对象序列化。最好去掉“generic”这个词,它在Java中具有特定和不同的含义,它不会在这里添加任何东西。
【解决方案2】:

Protocal Buffers 是最紧凑的 java 对象序列化方式之一。

根据您的需要,您可以将其与您自己的传输协议(原始 tcp 套接字、udp、http..)结合起来

【讨论】:

  • 谢谢@Andreas Petersson (+1) - 请在 Charles Forsythe 的回答下查看我的问题 - 我有同样的问题要问你!
【解决方案3】:

RMI 的速度受两件事支配:

  1. 默认 Java 序列化
  2. 分布式垃圾回收

默认的 Java 序列化可能会非常臃肿。您可以通过实现Externalizale 并进行自己的基本序列化来使您的对象序列化更加轻量级。这已经开始看起来像是在做一个自定义协议。

如果您的系统变大并包含许多 JVM,分布式垃圾收集可能会成为一个因素。 DGC 涉及 JVM 交换消息,以提醒对方注意垃圾收集的对象。它可能会产生大量网络流量。

也就是说,RMI“开箱即用”可能比其他“开箱即用”替代方案更快。例如,与 RMI 相比,SOAP 在网络上的效率可能会低得多,并且涉及更深、更重的网络堆栈。

您可以构建比 RMI 更快的自定义 RPC,但如果您依赖 Java 序列化,由于上面的第 1 点,它可能不会更快。

最后,您为什么想要更快的协议?您对 RMI 的速度有疑问吗?您是否希望预先选择最快的“开箱即用”解决方案?请记住The rules of Optimize Club

【讨论】:

  • 感谢@Charles Forsythe (+1) - 我在谷歌搜索“可序列化与可外部化”后找到this,根据主要答案,JBoss 有自己的序列化机制,即“插入式”替换 JDK 附带的那个。你知道吗?成为“插入式”替代品是什么意思。我可能也可以将 RMI 与这个(优化的)JBoss 序列化程序一起使用......再次感谢!
  • 另外,看起来有些序列化程序比 JBoss 快得多(看看here)。据此,kryp 是序列化程序之王。那么和上面一样的问题,kryo可以“掉进去”代替JRE序列化,但仍然使用RMI作为协议吗?如果是这样,怎么做?再次感谢!
  • 不,不是。 RMI 使用对象序列化,仅此而已。
  • RMI 的速度也受 DNS 控制,当然也受网络带宽控制。我认为 DGC 与它没有太大关系,它发生在带外。
猜你喜欢
  • 2011-02-01
  • 2014-03-17
  • 1970-01-01
  • 2010-12-29
  • 2011-03-31
  • 2014-05-09
  • 2011-05-02
  • 2012-07-31
  • 1970-01-01
相关资源
最近更新 更多