RPC基本原理
RPC
RPC只是一个概念 而不是具体的协议或框架
远程方法调用,这是一个统称,重点在于方法调用(不支持对象的概念)。多用于服务器集群间的通信,因此常使用更加高效 短小精悍的传输模式以提高效率
TCP/IP传输
由服务的调用方与服务的提供方建立 Socket 连接,并由服务的调用方通过 Socket 将需要调用的接口名称、方法名称和参数序列化后传递给服务的提供方,服务的提供方反序列化后再利用反射调用相关的方法。
这个方法的本质就是 客户端把 参数 转化成二进制数组 然后通过TCP传给服务端 由服务端 调用方法获得结果 再转化成二进制数组传给客户端
简化客户端的流程 引入stub(客户端存根)
客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端。
本质上就是在客户端对网络层的内容进行了封装,用户不需要再关心网络层,但显然此时由于方法写死导致代码可拓展性不强
使用动态代理生成service类供客户端调用 彻底隐藏所有网络细节
实质就是把方法名也传递给服务端
server:
服务端获得方法名和参数,使用反射的方法获得输出结果返回给客户端
服务端直接写回对象
服务端写回一个对象 而不是在客户端哪里获得属性然后组装对象,这里可以采用不同的序列化方式
在客户端存根当中 服务端写回的结果进行了改变
服务端支持对不同类的不同函数、不同参数的结果返回
实质就是把接口名也传给服务端
server 获取名字
总结
最后 其实上述的所有版本 底层都是基于TCP/IP通信协议
我们也可以采用CORBA,Web Service,RestFul等协议来实现
我有一壶酒
足以慰风尘
尽倾江海里
赠饮天下人