先回答第一个问题:什么是RPC框架?如果用一句话概括RPC就是:远程调用框架(RmotProcdurCall)
那什么是远程调用?
通常我们调用一个php中的方法,比如这样一个函数方法:localAdd(10,20),localAdd方法的具体实现要么是用户自己定义的,要么是php库函数中自带的,也就说在localAdd方法的代码实现在本地,它是一个本地调用!
远程调用意思就是:被调用方法的具体实现不在程序运行本地,而是在别的某个远程地方。
远程调用原理比如A(clint)调用B(srvr)提供的rmotAdd方法:
首先A与B之间建立一个TCP连接;
然后A把需要调用的方法名(这里是rmotAdd)以及方法参数(10,20)序列化成字节流发送出去;
B接受A发送过来的字节流,然后反序列化得到目标方法名,方法参数,接着执行相应的方法调用(可能是localAdd)并把结果30返回;
A接受远程调用结果,输出30。
RPC框架就是把我刚才说的这几点些细节给封装起来,给用户暴露简单友好的API使用。
远程调用的好处解耦:当srvr需要对方法内实现修改时,clint完全感知不到,不用做任何变更;这种方式在跨部门,跨公司合作的时候经常用到,并且方法的提供者我们通常称为:服务的暴露。
RPC与Sockt有什么区别?通过上面的简单阐述,好像RPC与Sockt好像啊。都是调用远程的方法,都是clint/srvr模式,我之前也写了一篇文章:细说sockt那他们有啥区别呢?
RPC(远程过程调用)采用客户机/服务器模式实现两个进程之间相互通信。sockt是RPC经常采用的通信手段之一,RPC是在Sockt的基础上实现的,它比sockt需要更多的网络和系统资源。除了Sockt,RPC还有其他的通信方法,比如: