HTTP和RPC的关系.HTTP和RPC其实是两个维度的东西,HTTP指的是通信协议。
而RPC则是远程调用,其对应的是本地调用。
RPC的通信可以用HTTP协议,也可以自定义协议,是不做约束的。
像之前的单体时代,我们的service调用就是自己实现的方法,是本地进程内的调用。
publicUsergetUserById(Longid){returnuserDao.getUserById(id);}.现在都是微服务了,根据业务模块做了不同的拆分,像用户的服务不用我这个小组负责,我这小组只要写订单服务就行了。
但是我们服务需要用到用户的信息,于是我们需要调用用户小组的服务,于是代码变成了以下这种.。
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是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
初学情况下只要了解http协议和调用http协议,java使用httpClient,还有socket编程就好了。RPC我也了解的不多。
这个你得先了解OSI的七层模型才行,从底层开始分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP不是OSI模型中的,它属于DOD模型,是融合了ISO七层中网络层和传输层。HTTP是OSI模型中的应用程协议,是在最高层的。UDP协议是OSI传输层的协议,在第四层。其他的两个协议我不太熟悉!
http接口实在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。利用现成的http协议进行传输。但是如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了,首先就是长链接,不必每次通信都要像http一样去3次握手什么的,减少了网络开销;其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。第三个来说就是安全性。最后就是最近流行的服务化架构、服务化治理,RPC框架是一个强力的支撑。
rpc是一种概念,http也是rpc实现的一种方式。论复杂度,dubbo/hessian用起来是超级简单的。最近用dubbo和hessian比较多,http的几乎都被废弃了。
至于为什么用,其实很简单,业务场景不一样。我最早的单位所有的代码都在一个工程里,一次要发布几百m的代码。这种架构是非常有利于小程序的。但是我们为什么要应用rpc层呢,一个功能,一套代码下来不就解决了么?我觉得有几个好处:
1 灵活部署 2 解耦 至于为什么,当你用到的时候,你会体会。
服务器通讯原理就是一台socket服务器A,另一台socket客户端B,现在如果要通讯的话直接以流方式写入或读出。这样能实现通讯,但有个问题。如。
何知道更多信息?比如需要发送流大小,编码,Ip等。这样就有了协议,协议就是规范,就是发送的流中携带了很多的内容。那回到刚刚的问题。
发送的内容就是文本类型,客户端就得序列化,那么常用的就有json,xml之类。
如果想把内容变得更小,那就有二进制了。把文本变成二进制传递。
说到 rpc 与http接口,不要太复杂了。rpc 协议更简单内容更小,那么来说效率是要高一点。
然后rpc 是什么。就是socket 加动态代理,你去想想,为什么客户端能调用你的service .。