`
阅读更多

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


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


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


      第四、这是最后一点不同,我认为也是比较重要的一点,就是两种方法的性能比较,其往往决定着你将使用那种技术来开发你的应用。以下引用Adrian Reber在Network-programming with RMI文中对TCP和RMI所做的一个比较,其做的实验主要是对两者在网络传输的带宽上作的对比: 在网络上传输2 byte的有效数据,对于TCP而言,总共有478 byte被额外传输,而对于RMI, 1645byte被额外传输。

 

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

分享到:
评论

相关推荐

    基于RMI和Socket的带数据库的java聊天软件 客户端和服务器端

    Java聊天室 服务器端和客户端都有,可实现多人和单人聊天,同时用户不在线时收到的消息会被存储到数据库,代码可拓展性强

    基于JAVA的socket编程 RMI

    基于java的socket及RMI编程,东北大学 程序实践三的成果

    Java-远程方法调用RMI参数详解.docx

    本文档主要讲述的是Java 远程方法调用RMI参数详解;根据RMI参数意义,可以归结为以下几点,我们可以根据这几点通过优化GC, 网络等待,流传输协议(http/rmi special socket)等方面来优化RMI。

    java_rmi漏洞利用工具

    本项目使用socket直接发送数据包来攻击rmi,通过反序列化攻击rmi,双击直接运行,对1099端口的rmi服务直接进行漏洞检测。

    java进程间通讯机制代码----RMI、共享内存、Socket、管道

    java进程间通讯机制代码----RMI、共享内存、Socket、管道,等方式,每种方法我都讲了原理和例子程序,很有参考意义。在网上很难找到的。

    Java RMI.pdf

    threading, the RMI registry, sockets and socket factories, activation, dynamic class downloading, HTTP tunneling, distributed garbage collection, JNDI, and CORBA. In short, a treasure trove of ...

    分布式程序java 实验名称 基于Java RMI的C/S编程实验

    实验名称 基于Socket的C/S编程实验 实验名称 基于Java RMI的C/S编程实验

    rmi.rar_RMI chat

    java rmi实现群聊程序,在socket相比之下rmi显得更加简单方便

    RMI会议管理系统代码

    不会RMI的童鞋看看,可以帮助你们完成作业

    rmi.js:JavaScript的远程方法调用(RMI)

    RMI.js利用Socket.io在客户端和服务器之间交换数据。 使用RMI.js 在此最新版本( 0.1.1 )中,我将依赖项直接添加到package.json文件,因此 npm install rmi.js 应该足以使一切正常运行。 在HTML文件上,您需要...

    OReilly Java RMI

    This book provides strategies for working with serialization, threading, the RMI registry, sockets and socket factories, activation, dynamic class downloading, HTTP tunneling, distributed garbage ...

    西工大服务计算实验一_RMI

    使用 RPC 编程(socket、RMI…)实现一个远程对象的调用过程。客户端程序发送调用消息(自定义消息的格式)到服务器端,服务器端接收的调用消息,调用本地对象Hello,并将结果返回给调用方,并且显示。

    东北大学软件学院程序实践socket+rmi源代码

    这是我自己写的程序源代码,希望有助于理解该实验。

    socket通讯资料汇总

    用Java实现一个Socket通信模型.pdf 用Java实现网络通讯.pdf 用JAVA实现基于TCP的SOCKET编程.pdf 用Java实现基于TCPIP协议的网络通信程序.pdf 一种基于JAVA多线程的即时显示策略.pdf 利用Java实现网络通信.pdf ...

    EasyPacket:使用C#RMI的数据包处理自动化库

    TestNetServer->显示SuperSocket服务器如何与RMI通信的示例 TestNetClient->此示例显示了由RMI与本身实现的套接字客户端通过服务器进行通信的示例。 <如何编译IDL>第一次打开解决方案或更改IDL文件时,需要对其...

    Java对象序列化使用基础

    所谓对象序列化就是将对象的状态转换成字节流,以后可以通过这些值再生成相同状态的对象。这个过程也可以通过...像RMI、Socket、JMS、EJB它们中的一种,彼此为什么能够传递Java对象,当然都是对象序列化机制的功劳。

    socket通讯汇总

    用Java实现一个Socket通信模型 pdf 用Java实现网络通讯 pdf 用JAVA实现基于TCP的SOCKET编程 pdf 用Java实现基于TCPIP协议的网络通信程序 pdf 一种基于JAVA多线程的即时显示策略 pdf 利用Java实现网络通信 pdf ...

    远程对象方法调用(动态代理+socket).rar

    通过动态代理和socket编程技术实现RMI,远程对象方法的调用。

    简单的java socket源码

    简单的java socket源码,使用方法同我的另一个RMI实例的资源说明

    介绍Java对象序列化使用基础

    序列化的过程就是对象写入字节流和从字节流中读取对象。...对象序列化功能非常简单、强大,在RMI、Socket、JMS、EJB都有应用。对象序列化问题在网络编程中并不是最激动人心的课题,但却相当重要,具有许多实用意义。

Global site tag (gtag.js) - Google Analytics