首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有比RMI更快的Java二进制协议?

有没有比RMI更快的Java二进制协议?
EN

Stack Overflow用户
提问于 2013-03-30 23:19:50
回答 3查看 2.4K关注 0票数 3

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

有没有可能使用像Netty这样的东西来构建我自己的二进制(TCP)协议,这样会更快?我是一个网络新手,正在尝试理解各种可用的库和框架。请提前发问!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-30 23:49:15

RMI的速度由两件事决定:

Java serialization

  • Distributed Default
  1. 垃圾收集

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

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

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-03-30 23:34:43

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

假设我们有一个RMI服务

代码语言:javascript
复制
 Service srv = (Service) Naming.lookup(lookupString);
 srv.sayHi("Jack");
 srv.sayBye("Back");

我们可以做同样的事情,直接通过TCP连接发送命令和参数

代码语言:javascript
复制
 ObjectOutputStream out = ...
 out.write(0);  // 0 - Hi command 
 out.writeUTF("Jack");
 out.write(1);  // 1 - Bye command
 out.writeUTF("Jack");
票数 1
EN

Stack Overflow用户

发布于 2013-03-30 23:40:50

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15720099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档