博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于RPC原理的Dubbo
阅读量:5103 次
发布时间:2019-06-13

本文共 700 字,大约阅读时间需要 2 分钟。

RPC (Remote Procedure Call Protocol)远程调用协议

1.怎么做到透明化的远程调用协议?---动态代理

  怎么封装才能像调用本地程序一样调用服务?对java而言就是使用代理!

  java的代理方式有两种:①动态代理 ② 字节码生成

  字节码生成 这种方式更为高效和强大,但代码不易维护,所以大部分公司实现RPC框架时选择 动态代理!

有了实现方式以后,就面临对消息的编码和解码处理,以便于传输

2.如何对消息编码和解码?

 动态代理需要实现InvotionHandler接口,里面有个invoke方法,该方法封装通信细节,此时需呀确定服务端和客户端互相通讯的消息结构。

 客户端的消息结构一般包括以下几种:

  • 接口名称
  • 方法名
  • 参数类型和参数值
  • 超时时间
  • requestID,标示唯一请求ID

 同理,服务端返回的消息结构一般包括以下内容:

  • 返回值
  • 状态code
  • requestID

 确定了消息结构下一步就考虑序列化

 序列化,就是将数据结构或者对象转换成二进制串的过程,也就是编码过程

 反序列化,就是把序列化过程中生成的二进制串转换成数据结构或者对象的过程

 目前国内各大互联网公司广泛使用hessian、protobuf、thrift、avro等成熟的序列化解决方案来搭建RPC框架,这些都是久经考验的解决方案。

序列化完之后,就考虑通信

3.通信

该博客参考 https://www.cnblogs.com/panxuejun/p/6094790.html

 

转载于:https://www.cnblogs.com/ierha/p/8579878.html

你可能感兴趣的文章
SAMBA服务和FTP/sshd 服务讲解
查看>>
关于不执行整个大项目而是执行其中一部分独立文件夹的时候的python运行方法...
查看>>
LOJ10092半连通子图
查看>>
for循环结构
查看>>
博客园的第一篇文章-----述学习编程的开始与经历
查看>>
自我审视
查看>>
unix c 08
查看>>
HDU 5977 Garden of Eden(点分治求点对路径颜色数为K)
查看>>
flume与log4j的整合
查看>>
BM25算法的python实现
查看>>
Entity FrameWork利用Database.SqlQuery<T>执行存储过程并返回参数
查看>>
如何创建 Visual Studio 2017 RC 离线安装包
查看>>
时间安排还是很不合理
查看>>
Django Ajax学习一
查看>>
OGRE学习笔记(一)通过例子了解场景管理器---------地形创建
查看>>
51nod 1185 || 51nod 1072 威佐夫博弈
查看>>
DataGridView的行的字体颜色变化
查看>>
java.nio异步线程安全的IO
查看>>
(网上摘抄)云标签
查看>>
记录-时间日期
查看>>