RPC协议底层原理与实现

article/2025/9/19 4:27:45
RPC协议基本组成
在一个典型RPC的使用场景中,包含了服务发现、负载、容错、 网络传输 序列化 等组件,其中RPC协议就指明了程序如何进行网络传输和序列化 。也就是说一个RPC协议的实现就等于一个非透明的RPC调用,如何做到的的呢?
Client 客户端
Server 服务端

协议基本组成:
    
1.    地址:服务提供者地址;
2.    端口:协议指定开放的端口;
3.    运行服务:
1.    netty(默认)
2.    mina
3.    RMI 服务
4.    servlet 容器(jetty、Tomcat、Jboss)
4.    报文编码(编解码):协议报文编码 。 注①:http 报文编码 。注②:Dubbo 报文编码
5.    dubbo 序列化方式:
1.    Hessian2Serialization 、(默认)
2.    DubboSerialization
3.    JavaSerialization
4.    JsonSerialization
RPC协议报文编码与实现详解



注①:http 报文编码
注②Dubbo 协议报文编码:


(注:相关源码参见 c om.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec
协议的编解码过程:

Dubbo 协议编解码实现过程 (源码来源于 dubbo2.5.8 )
1、DubboCodec.encodeRequestData() 116L // 编码request
2、DecodeableRpcInvocation.decode() 89L // 解码request
3、DubboCodec.encodeResponseData() 184L // 编码response
4、DecodeableRpcResult.decode() 73L // 解码response
Dubbo中所支持RPC协议使用
名称实现描述连接描述适用场景
dubbo传输服务: mina, netty(默认), grizzy
序列化: dubbo, hessian2(默认), java, fastjson 自定义报文
单个长连接
NIO异步传输
1、常规RPC调用
2、传输数据量小 3、提供者少于消费者
rmi传输:java rmi 服务
序列化:java原生二进制序列化
多个短连接
BIO同步传输
1、常规RPC调用
2、与原RMI客户端集成 3、可传少量文件 4、不支持防火墙穿透
hessian传输服务:servlet容器
序列化:hessian二进制序列化
基于Http 协议传输,
依懒servlet容器配置
1、提供者多于消费者
2、可传大字段和文件 3、跨语言调用
http传输服务:servlet容器
序列化:http表单
依懒servlet容器配置1、数据包大小混合
thrift与thrift RPC 实现集成,并在其基础上修改了报文头长连接、NIO异步传输 
协议的使用与配置:

Dubbo框架为了更灵活扩展,其支持多种协议,用户只需要在 provider 应用中 配置即可 < dubbo:protocol > 元素即可。
<!--
name: 协议名称 dubbo|rmi|hessian|http|
host:本机IP可不填,则系统自动获取
port:端口、填-1表示系统自动选择
server:运行服务 mina|netty|grizzy|servlet|jetty
serialization:序列化方式 dubbo|hessian2|java|compactedjava|fastjson
详细配置参见dubbo 官网 dubbo.io
-->
<dubbo:protocol name="dubbo" host="192.168.0.11" port="20880" server="netty"
serialization= hessian2” charset= UTF-8” />

#TODO 演示采用其它协议来配置Dubbo
dubbo 协议采用 json 进行序列化 ( 源码参见:com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol )
采用RMI协议 ( 源码参见: com.alibaba.dubbo.rpc.protocol.rmi.RmiProtocol)
采用Http协议 ( 源码参见: com.alibaba.dubbo.rpc.protocol.http.HttpProtocol.InternalHandler)
采用Heason协议 ( 源码参见:com.alibaba.dubbo.rpc.protocol.hessian.HessianProtocol.HessianHandler)

http://chatgpt.dhexx.cn/article/tI3qiiWj.shtml

相关文章

RPC详解

RPC是什么 RPC&#xff08;Remote Procedure Call&#xff09;远程过程调用协议&#xff0c;一种通过网络从远程计算机上请求服务&#xff0c;而不需要了解底层网络技术的协议。RPC它假定某些协议的存在&#xff0c;例如TPC/UDP等&#xff0c;为通信程序之间携带信息数据。在O…

深入理解RPC—协议

协议 一提到协议&#xff0c;你最先想到的可能是 TCP 协议、UDP 协议等等&#xff0c;并且这些网络传输协议的实现有点晦涩难懂。虽然在 RPC 中我们也会用到这些协议&#xff0c;但这些协议更多的是对我们上层应用是透明的&#xff0c;我们 RPC 在使用过程中并不太需要关注他们…

浅谈RPC协议

RPC协议 RPC简介为啥需要RPCRPC的调用过程gRPCProtoBuffergRPC实战 RPC简介 RPC&#xff08;Remote Procedure Call Protocol&#xff09;远程过程调用协议&#xff0c;目标就是让远程服务调用更加简单、透明。RPC 框架负责屏蔽底层的传输方式&#xff08;TCP 或者 UDP&#x…

网络协议——RPC协议综述

拿最简单的场景&#xff0c;客户端调用一个加法函数&#xff0c;将两个整数加起来&#xff0c;返回它们的和。 如果放在本地调用&#xff0c;那是简单的不能再简单了&#xff0c;。但是一旦变成了远程调用&#xff0c;门槛一下子就上去了。 如何解决这五个问题&#xff1f; …

RPC(远程过程调用协议)简介

RPC框架解释 谁能用通俗的语言解释一下什么是 RPC 框架&#xff1f; - 远程过程调用协议RPC&#xff08;Remote Procedure Call Protocol) 首先了解什么叫RPC&#xff0c;为什么要RPC&#xff0c;RPC是指远程过程调用&#xff0c;也就是说两台服务器A&#xff0c;B&#xff0…

RPC和HTTP

一、为什么需要RPC&#xff0c;而不是简单的HTTP接口&#xff1f; RPC&#xff08;即Remote Procedure Call&#xff0c;远程过程调用&#xff09;&#xff0c;主要是基于TCP/IP协议&#xff1b;而HTTP服务主要是基于HTTP协议的。我们都知道HTTP协议是在传输层协议TCP之上的&a…

RPC入门总结(一)RPC定义和原理

转载&#xff1a;深入浅出 RPC - 浅出篇 转载&#xff1a;RPC框架与Dubbo完整使用 转载&#xff1a;深入浅出 RPC - 深入篇 转载&#xff1a;远程调用服务(RPC)和消息队列(Message Queue)对比及其适用/不适用场合分析 一、RPC 1. RPC是什么 RPC&#xff08;Remote Proced…

RPC协议与Http协议区别

RPC调用 RPC是远程过程调用&#xff08;Remote Procedure Call&#xff09;的缩写形式。SAP系统RPC调用的原理其实很简单&#xff0c;有一些类似于三层构架的C/S系统&#xff0c;第三方的客户程序通过接口调用SAP内部的标准或自定义函数&#xff0c;获得函数返回的数据进行处理…

RPC——RPC协议介绍及原理详解

common wx&#xff1a;CodingTechWork 介绍 RPC框架 概念 RPC&#xff08;Remote Procedure Call Protocol&#xff09; 远程过程调用协议。RPC是一种通过网络从远程计算机程序上请求服务&#xff0c;不需要了解底层网络技术的协议。RPC主要作用就是不同的服务间方法调用就…

RPC协议简述

RPC是指远程过程调用&#xff0c;也就是说两台服务器&#xff0c;一个应用部署在其中一台服务器上&#xff0c;想要调用另外一台服务器上应用提供的函数&#xff08;方法&#xff09;&#xff0c;由于不在一个内存空间&#xff0c;不能直接调用&#xff0c;需要通过网络来表达调…

一文带你搞懂HTTP和RPC协议的异同

1 什么是RPC协议 1.1 简介 这是老生常谈的协议了&#xff0c;RPC即远程过程调用&#xff08;Remote Procedure Call&#xff09;&#xff0c; RPC协议是一种通过网络从远程计算机程序上请求服务&#xff0c;而不需要了解底层网络技术的协议。 1.2 原理及模型 RPC协议广泛的…

关于RPC协议的通俗理解

根据网上搜索的一些资料摘抄汇总的&#xff0c;如果有误&#xff0c;欢迎斧正。 作者&#xff1a;肖继潮 链接&#xff1a;http://www.zhihu.com/question/25536695/answer/31046384 来源&#xff1a;知乎 著作权归作者所有&#xff0c;转载请联系作者获得授权。 早期单机时代&…

NLP之中文命名实体识别

在MUC-6中首次使用了命名实体&#xff08;named entity&#xff09;这一术语&#xff0c;由于当时关注的焦点是信息抽取&#xff08;information extraction&#xff09;问题&#xff0c;即从报章等非结构化文本中抽取关于公司活动和国防相关活动的结构化信息&#xff0c;而人名…

命名实体识别(biLSTM+crf)

本文是翻译的github这个项目的博客https://guillaumegenthial.github.io/sequence-tagging-with-tensorflow.html。 为什么要用biLSTM?为了使特征提取自动化。当使用CRF工具来进行命名实体识别时&#xff0c;需要自定义模板&#xff08;或者使用默认的模板&#xff09;。 任…

命名实体识别(NER)算法

文章目录 标注方案问题建模评价指标常用的NER方法深度学习方法&#xff08;in survey&#xff09;输入的分布式表示上下文编码解码器**先说MLPsoftmax和CRF**softmax 延伸至多标签解码 **RNN**Pointer Networks 实践Bert SoftmaxBert CRF 参考 之前做了NER的相关工作&#xf…

命名实体识别(NER):BiLSTM-CRF原理介绍+Pytorch_Tutorial代码解析

本文较全面的介绍了命名实体识别&#xff08;NER&#xff09;&#xff0c;包括NER定义、BiLSTM-CRF模型、Pytorch代码实现&#xff0c;未来将继续完善本文&#xff0c;以求涵盖NER众多方面。 文章目录 命名实体识别任务&#xff08;NER&#xff09;定义BiLSTM-CRF模型模型输入L…

命名实体识别代码阅读

中文命名实体识别 BERT中文任务实战 18分钟快速实战_哔哩哔哩_bilibili 注意注释 from transformers import AutoTokenizer import time # 时间start time.time() #加载分词器 tokenizer AutoTokenizer.from_pretrained(hfl/rbt6) #中文bertprint(tokenizer)#分词测试&am…

命名实体识别详解

1.命名实体识别定义 例如&#xff1a; 2.常用开源的中英文NER工具 这些工具的缺点是&#xff1a;只提供通用型的实体类别如 人名&#xff0c;地方&#xff0c;组织&#xff0c;时间等&#xff0c;对于特定领域&#xff0c;可能很难提取出你需要的实体。 2.1 代码实践 代码来…

命名实体识别(NER – Named-entity recognition) 总结

1. 什么是命名实体识别&#xff1f; 命名实体识别&#xff08;Named Entity Recognition&#xff0c;简称NER&#xff09;&#xff0c;又称作“专名识别”&#xff0c;是指识别文本中具有特定意义的实体&#xff0c;主要包括人名、地名、机构名、专有名词等。简单的讲&#xf…

命名实体识别学习笔记

1 命名实体识别概述 1.1 定义 命名实体识别&#xff08;Name Entity Recognition&#xff0c;NER&#xff09;&#xff0c;也称作“专名识别”&#xff0c;是指识别文本中具有特定意义的实体&#xff0c;包括人名、地名、机构名、专有名词等。 1.2 形式化定义 给定标识符集…