博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java RMI VS TCP Socket
阅读量:5132 次
发布时间:2019-06-13

本文共 2062 字,大约阅读时间需要 6 分钟。

RMI比较socket的网络编程主要有以下几个方面:

    第一、.RMI是面向对象的,而后者不是。

    第二、.RMI是与语言相绑定的。比如当你使用Java RMI技术的时候,客户端与服务器端都必须使用Java开发。而socket的网络编程是使用独立于开发语言的,甚至独立于平台。基于socket的网络编程,客户端与服务器端可以使用不同开发语言和不同的平台。

    第三、从网络协议栈的观点来看,RMI与socket的网络编程处于不同层次上。基于socket的网络编程位于TCP协议之上,而RMI在TCP协议之上,又定义了自己的应用协议,其传输层采用的是Java远程方法协议(JRMP)。可见,在网络协议栈上,基于RMI的应用位置更高一些,这也决定了,与 socket的网络编程相比,RMI会丧失一些灵活性和可控性,但是好处是它带给了应用开发者更多的简洁,方便和易用。比如:如果你用的是RMI,你不需要关心消息是怎么序列化的,你只需要像本地方法调用一样,使用RMI。代价是:应用开发者无法很好地控制消息的序列化机制。

    第四、就是两种方法的性能比较,其往往决定着你将使用那种技术来开发你的应用。     实验的结果是:RMI与TCP based socket相比,传输相同的有效数据,RMI需要占用更多的网络带宽(protocol overhead)。从这里,我们可以得出一个一般性的结论:RMI主要是用于远程方法的”调用“(RMI是多么的名符其实:)),其技术内涵强调的是 “调用”,基于此,我能想到的是:移动计算,和远程控制,当你的应用不需要在client与server之间传输大量的数据时,RMI是较好的选择,它简洁、易于开发。但是,一旦你的应用需要在client与server之间传输大量的数据,极端的,比如FTP应用,则RMI是不适合的,我们应该使用 socket。

RMI vs. Sockets and Object Serialization

The Remote Method Invocation (RMI) is a Java system that can be used to easily develop distributed object-based applications. RMI, which makes extensive use of object serialization, can be expressed by the following formula:

RMI = Sockets + Object Serialization + Some Utilities

The utilities are the rmi registry and the compiler to generate stubs and skeletons.

If you are familiar with RMI, you would know that developing distributed object-based applications in RMI is much simpler than using sockets. So why bother with sockets and object serialization then?

The advantages of RMI in comparison with sockets are:

  • Simplicity: RMI is much easier to work with than sockets
  • No protocol design: unlike sockets, when working with RMIthere is no need to worry about designing a protocol between the clientand server -- a process that is error-prone.
The simplicity of RMI, however, comes at the expense of the network. There is a communication overhead involved when using RMI and that is due to the RMI registry and client stubs or proxies that make remote invocations transparent. For each RMI remote object there is a need for a proxy, which slows the performance down.

转载于:https://www.cnblogs.com/yefengmeander/archive/2012/01/04/2887625.html

你可能感兴趣的文章
Python 函数式编程(3) —— 闭包
查看>>
RHEL6 kernel bug在hadoop上的测试
查看>>
8种传值方式
查看>>
EF的简单认识
查看>>
如何降低死循环的 CPU 占用
查看>>
leetcode 682. 棒球比赛(Baseball Game)
查看>>
Appstore 上传
查看>>
HTML5新增的几个容器模块
查看>>
利用Servlet做一套增删改查
查看>>
linux shell 之 crontab(定时任务)详解
查看>>
linux 远程管理
查看>>
儿童节礼物
查看>>
POJ 1006 同余方程组
查看>>
javascript时间差工具包
查看>>
TCP/IP 基础简介
查看>>
页面中部分标签简单描述
查看>>
GIT 远程仓库
查看>>
[工具]Visual Studio
查看>>
【亲测可行】Dev c++调试、运行报错解决方法总结
查看>>
MySQL Innodb引擎和MyIASM引擎的区别
查看>>