网络协议——RPC协议

网络协议——RPC协议网络协议——RPC协议远程调用协议,用于定义服务之间的接口调用规范标准1、RPC调用标准1.1、RPC结构客户端(服务端):执行逻辑进行本地调用Stub:对参数进行封装/解封装RPCRuntime:发送/接收请求/响应1.2、ONCRPC最早的RPC框架之一1.2.1、外部数据表示法(XDR)规定交互协议的文件,包括:XID:一对请求/响应的唯一标识CALL:请求为0,响应为1RPCVersion:RPC协议的版本号ProgramNumber:服务端程序的编号Ve

大家好,又见面了,我是你们的朋友全栈君。

网络协议——RPC协议


远程调用协议,用于定义服务之间的接口调用规范标准

1、RPC调用标准

1.1、RPC结构

  • 客户端(服务端):执行逻辑进行本地调用
  • Stub:对参数进行封装/解封装
  • RPCRuntime:发送/接收请求/响应

1.2、ONC RPC

最早的RPC框架之一

1.2.1、外部数据表示法(XDR)

规定交互协议的文件,包括:

  • XID:一对请求/响应的唯一标识
  • CALL:请求为0,响应为1
  • RPC Version:RPC协议的版本号
  • Program Number:服务端程序的编号
  • Version Number:服务端程序的版本号
  • Procedure Number:调用的方法
  • Credential、Verifier:认证鉴权
  • Remote Procedure Parameters:参数列表

1.2.2、端口映射器(PortMapper)

服务提供方的RPC程序启动时将自己的服务端口注册在PortMapper中,服务调用方从PortMapper中找映射的端口,然后再和服务提供方建立连接

2、简单对象访问协议(SOAP)

与古老的RPC协议相比,双方的SOAP协议没必要完全一致(参数顺序、参数个数等),更加灵活

2.1、Web服务描述语言(WSDL)

也是一个XML,描述了方法名、服务名、端口、请求参数等信息,通过在服务地址后加”?wsdl”查看

2.2、统一描述、发现和集成协议(UDDI)

以SOAP协议为基础的RPC服务,将自己的wsdl文件放到UDDI中,供服务调用方封装成本地调用

3、RESTful格式的API

全称叫表述性状态转移,基于HTTP协议的请求通过方法类型(GET、POST等)确定请求动作,数据以JSON文本格式传输

4、二进制类RPC协议

将数据压缩成二进制,减少带宽占用

Hessian2

Dubbo中默认的序列化协议

服务调用方根据Hessian2协议的规则,只记录类文件中类名、方法名、字段等信息的名称和字符长度等,压缩成二进制作为自描述,同时将参数的长度和值压缩成二进制,与自描述一同传输

服务提供方通过Hessian2协议的统一规则,对接受的二进制流进行解析,获得真正的请求

5、跨语言类RPC协议

不同的需求使用不同的编程语言,主要为了适应跨语言调用

Protocal Buffers

使用TLV(Tag,Length,Value)的存储办法将请求数据压缩

  • Tag:根据类文件中字段的唯一标识field_num,和字段类型的标识wire_type生成
  • Length:字段值的长度
  • Value:字段值

Envoy

一种动态的负载均衡器,有4个基础配置:

  • listener:监听端口接入请求
  • endpoint:目标IP地址和端口,请求转发的目的地
  • cluster:一组相同的endpoint,可以通过轮询进行负载和健康检查
  • route:通过route规则,跳到不同版本的cluster,或根据条件进行流量分配
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144454.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • afl-fuzz技术白皮书[通俗易懂]

    afl-fuzz技术白皮书[通俗易懂]通过在编译期间instrument一些指令来捕获branch(edge)coverage和运行时分支执行计数。

    2022年10月21日
  • java protostuff 序列化_使用Protostuff序列化

    java protostuff 序列化_使用Protostuff序列化序rpc调用,有多种序列化的方式,通用如json,mongodb使用的bson;java方面的,比如Java默认的序列化,比如hessian;还有跨语言的,比如thrift、protocolbuf。thrift和pb的好处是序列化后size比较小,但是缺点是得生成java代码,这个挺鸡肋的,所以不管二者运行时效率有多高,开发效率相对比较低的。像hessian,是有一些在用,但是感觉不如pb那样强大…

    2022年5月5日
  • 太极 免ROOT使用Xposed模块

    太极 免ROOT使用Xposed模块太极免ROOT使用Xposed模块什么是太极?能干什么?我这里就不说了,大家可以去关注虚拟框架公众号去了解一下,我这里只是讲解怎么用。一,下载太极最新版太极下载畅玩微信模块下载其他模块都可以在虚拟框架公众号中下载二,添加应用打开太极可以看到太极内核已激活,说明可以正常使用。点击右下角按钮展开可以看到创建应用,模块管理,下载模块,…

    2022年6月4日
  • asp.net中英文转换

    asp.net中英文转换一、中英文切换主要是依靠资源文件(Resources):资源文件名称格式:"页面名称加后缀.resx"      资源文件分为本地[App_LocalResources]和全球化[App_GlobalResources]二、实现过程:  本地资源:1.添加文件夹[App_LocalResources]                    2.创建以.resx结尾的资源文件   …

    2022年10月24日
  • 高通msm8916 LK阶段配置使用i2c5

    高通msm8916 LK阶段配置使用i2c5背景:在调试SLM753某客户项目LCM时,客户使用LVDS的LCM,而msm8916只有一个mipi的接口,所以就是用到了mipi-2-lvds转换芯片:icn6202。这颗芯片需要使用I2C进行配置LVDS屏的时钟和分辨率等信息,以至于LVDS屏可以正常显示。Kernel阶段i2c比较容易使用,只需在dts中配置一个i2c设备即可以使用对应的i2c接口进行数据传输,但是LK阶段的代码就显得

    2022年10月19日
  • Java的三种取整方法「建议收藏」

    方法一:向上取整Math.ceil();举例:Math.ceil(11.4)=12;Math.ceil(-11.6)=-11;方法二:向下取整Math.floor();举例:Math.floor(11.7)=11;Math.floor(-11.2)=-12;方法三:四舍五入Math.round();顾名思义,四舍五入后取整,其算法为Math.round(x+0.5),即原来的数字加上0.5后再想下

    2022年4月10日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号