RPC TCP/IP UDP HTTP SOCKET RMI

RPC底层还是基于Socket,只不过是高一层的封装、抽象、简化。
RPC和Socket各有优缺点,没有说谁好谁不好的,关键是应用场景。
分布式系统中同时使用了二者,只不过,RPC用于后台节点间的通信(频繁,数据量小);
而Socket用于客户端与后台的通信,比如:文件的下载(数据量大)


以开发人员,已经有现成的RPC库可以用,使用起来会比较方便, 如J2EE体系自带的RMI, 不需要懂太多RPC知识,只要按照规范写就可以了, 只不过RMI把底层socket通信封装了,你不需要知道。
如果开发自己写socket也可以,但要管很多繁琐的通信细节,如协议定义,异常处理, 都是跟业务没关的东西,相当于浪费时间又把RPC写了一遍。
RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,出于一种类比的愿望,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像LPC(本地过程调用).越底层,代码越复杂、灵活性越高、效率越高;越上层,抽象封装的越好、代码越简单、效率越差。Socket和RPC的区别再次说明了这点。


不论是程序员在编写基于C/S(客户端服务器)的程序时,还是网络工程师在处理RPC问题时,他们问的最多的就是RPC和Socket有什么区别和联系? 
RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,出于一种类比的愿望,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像LPC(本地过程调用).RPC带来了开发C/S程序的简单可靠的手段,它通过一种叫XDR的数据表达方法描述数据,程序员书写伪代码,然后由rpcgen程序翻译为真正的可编译的C语言源代码,再编译成真正的Client端和Server端程序。 
RPC作为普遍的C/S开发方法,开发效率高效,可靠.但RPC方法的基本原则是--以模块调用的简单性忽略通讯的具体细节,以便程序员不用关心C/S之间的通讯协议,集中精力对付实现过程.这就决定了 RPC生成的通讯包不可能对每种应用都有最恰当的处理办法,与Socket方法相比,传输相同的有效数据,RPC占用更多的网络带宽. 
RPC是在Socket的基础上实现的,它比socket需要更多的网络和系统资源.另外,在对程序优化时,程序员虽然可以直接修改由rpcgen产生的令人费解的源程序,但对于追求程序设计高效率的RPC而言,获得的简单性则被大大削弱.
RPC与是Socket的类比 


TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。
tcp和udp都是传输协议,主要区别是tcp协议连接需要3次握手,断开需要四次握手,是通过流来传输的,就是确定连接后,一直发送信息,传完后断开。udp不需要进行连接,直接把信息封装成多个报文,直接发送。所以udp的速度更快写,但是不保证数据的完整性和数据顺序,(这个是可以在实现时通过验证手段来手动确定完整性)。
http协议是建立在TCP协议之上的一种应用,是Web联网的基础,最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
socket并不是一种协议,是在程序员层面上对TCP/IP协议的封装和应用。其实是一个调用接口,方便程序员使用TCP/IP协议栈而已。程序员通过socket来使用tcp/ip协议。但是socket并不是一定要使用tcp/ip协议,Socket编程接口在设计的时候,就希望也能适应其他的网络协议。
rpc是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
SOCKET使用时可以指定协议TCP,UDP等;
RIM使用JRMP协议,JRMP又是基于TCP/IP;
RPC底层使用SOCKET接口,定义了一套远程调用方法;
HTTP是建立在TCP上,不是使用SOCKET接口,需要连接方主动发数据给服务器,服务器无法主动发数据个客户端;
可以用socket实现HTTP;
其实符合HTTP规范的就是HTTP协议,不管用什么技术。
 
hessian是一套用于建立web service的简单的二进制协议,用于替代基于XML的web service,是建立在rpc上的,hessian有一套自己的序列化格式将数据序列化成流,然后通过http协议发送给服务器,看源码发现其实是使用
HttpURLConnection和servlet建立连接,然后发送流
 
 
hessian
http://hessian.caucho.com
 
RIM和SOCKET比较,见下文
http://www.cppblog.com/sherrylso/archive/2007/07/28/28906.html
 
RMI和RPC差别
http://blog.csdn.net/zhigangsun/article/details/5892591
 
http和socket差别
http://sw1982.iteye.com/blog/460406
 
REST  代表性状态传输
http://www.ibm.com/developerworks/cn/webservices/ws-restful/index.html
http://www.iteye.com/topic/1111647
REST描述语言 WADL
 
SOAP 简单对象访问协议
描述语言WSDL




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值