解锁 MCP 中的 JSON-RPC:跨平台通信的奥秘
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益:
- 了解大厂经验
- 拥有和大厂相匹配的技术等
希望看什么,评论或者私信告诉我!
文章目录
- 零、 背景
- 一、RPC vs HTTP
- 1.1 什么是RPC
- 1.2 为什么需要 RPC?
- 1.3 RPC 解决了什么问题?
- 1.4 RPC vs HTTP
- 二 、JSON-RPC
- 2.1 什么是JSON-RPC
- 2.2 JSON-RPC 关键特性
- 2.3 JSON-RPC 与普通 JSON 的区别
- 2.4 JSON-RPC 的核心优势
- 2.5、MCP 选择 JSON-RPC 的原因
- 三、JSON-RPC 例子
- 3.1 server 端
- 3.2 client 端
- 3.3 运行的结果
- 3.4 其他类库的对比
- 四、总结
零、 背景
最近趁有时间,搞一下 MCP,前面我们已经再为更进一步的 MCP 打下了基础
一文搞定 Python 装饰器 以及 Web架构全解析:8种类型优缺点及场景
这边文章,我们继续,搞一下 MCP 的 Json-rpc,目前 MCP 主要靠 json-rpc 进行 client 和 server 的通信
一、RPC vs HTTP
1.1 什么是RPC
RPC(Remote Procedure Call,远程过程调用)是一种通过网络在不同计算机程序之间实现服务调用的协议或技术框架。其核心目标是让开发者能够像调用本地方法一样调用远程服务,而无需关注底层网络传输的细节(如通信协议、序列化、网络连接等)。
核心特征:
- 透明性:开发者无需感知远程调用的存在,调用逻辑与本地方法一致。
- 标准化:通过接口定义语言(IDL)或动态代理技术,统一不同系统间的数据表示、传输和方法调用规范。
- 跨语言支持:允许用不同编程语言编写的服务进行交互(如 Java 服务调用 Python 方法)。
1.2 为什么需要 RPC?
RPC 的诞生源于分布式系统的需求,主要解决以下问题:
-
分布式协作
现代应用常拆分为多个独立服务(如电商系统的订单、库存服务),RPC 提供高效的服务间通信机制,使各模块能协同工作。
-
性能优化
相比传统的 HTTP 短连接,RPC 通过长连接复用、二进制序列化(如 Protobuf)和协议优化(如 HTTP/2 多路复用),显著降低网络延迟和资源消耗。
-
服务治理
RPC 框架内置服务发现、负载均衡、熔断降级等能力,简化分布式系统的运维复杂度。
-
跨语言集成
在异构技术栈环境下(如 Java 后端与 Python 数据分析服务),RPC 提供统一的通信标准,避免各语言自行实现协议适配。
1.3 RPC 解决了什么问题?
-
网络通信的复杂性
RPC 封装了底层网络传输(如 TCP/UDP)、数据序列化与反序列化,开发者只需关注业务逻辑,无需手动处理网络编程细节。
-
数据表示的异构性
通过标准化的序列化协议(如 JSON、Protobuf),解决不同系统间数据格式差异问题,确保数据跨语言、跨平台兼容。
-
服务发现与调用规范
提供注册中心(如 ZooKeeper)和动态代理机制,自动定位服务节点并生成调用代码,避免硬编码服务地址。
-
高并发与容错
支持线程池管理、请求队列和重试策略,提升系统在高负载下的稳定性和容错能力。
1.4 RPC vs HTTP
HTTP 和 RPC 虽然都用于网络通信,但 RPC 的诞生并非取代 HTTP,而是为了在特定场景下弥补 HTTP 的不足,尤其是在分布式系统和高性能服务调用的需求中。以下是两者核心差异及 RPC 存在的必要性:
一、协议设计与性能效率
-
协议效率优化
RPC 通常采用二进制协议(如 Protobuf、Thrift)进行数据序列化,相比 HTTP 的文本格式(如 JSON/XML),二进制协议的体积更小、序列化速度更快。例如,传输相同数据时,Protobuf 的带宽占用比 JSON 减少 60% 以上,解析速度提升 5-10 倍。
示例:传输 {“userId”: 12345, “name”: “Alice”},JSON 需要 32 字节,Protobuf 仅需 8 字节。
-
连接管理机制
RPC 默认使用长连接和连接池,复用 TCP 连接减少握手开销,而 HTTP/1.1 的短连接需要频繁建立/断开连接(即使启用 Keep-Alive 仍需传输冗余头部)。例如,gRPC 基于 HTTP/2 实现多路复用,一个 TCP 连接可并行处理多个请求。
二、开发体验与服务治理
-
调用方式透明化
RPC 通过动态代理和接口定义语言(IDL)实现类似本地方法调用的体验,例如:
User user = userService.getUser(123); // 无需关注网络传输细节而 HTTP 需手动封装 URL、Header、Body,代码复杂度更高。
-
内置服务治理能力
RPC 框架(如 Dubbo、gRPC)集成服务发现、负载均衡、熔断降级等功能。例如,服务节点动态扩容时,RPC 通过注册中心(如 Zookeeper)自动通知调用方,而 HTTP 需手动修改 Nginx 配置。
三、适用场景的差异
-
RPC 的主战场
微服务架构:内部服务高频调用(如订单服务调用库存服务),要求低延迟、高吞吐(每秒数万次调用)。
高性能计算:金融交易、实时数据处理等场景,节省 1ms 延迟可能带来百万级收益。
-
HTTP 的优势场景
对外暴露 API:浏览器、第三方系统等异构环境兼容性强(如微信支付接口)。
快速原型开发:无需复杂服务治理时,HTTP 的 RESTful API 开发更简单。
四、综合对比与选择建议
维度 | RPC(如 gRpc/Dubbo) | HTTP(RESTful) |
---|---|---|
协议类型 | 二进制协议(Protobuf/Thrift) | 文本协议(JSON/XML) |
性能 | 高(低延迟、小带宽) | 低(高冗余、大带宽) |
服务治理 | 内置(负载均衡、熔断) | 依赖网关(如 Nginx) |
跨语言支持 | 需协议适配(如 Protobuf) | 天然支持 |
适用场景 | 微服务内部调用、高性能计算 | 前后端交互、开放 API |
五、为什么需要 RPC?
-
解决 HTTP 的性能瓶颈
在高并发场景下,HTTP 的文本协议冗余、短连接开销、线程阻塞模型会成为性能瓶颈,而 RPC 通过二进制协议、长连接复用、异步 I/O 显著提升效率。
-
降低分布式系统复杂度
RPC 隐藏网络通信细节,提供“透明化”调用,开发者只需关注业务逻辑,无需手动处理序列化、重试、超时等问题。
-
适应技术栈统一的内部协作
在公司内部使用统一技术栈时,RPC 的强类型接口和代码生成能力可减少联调错误,提升开发效率。
六、总结
HTTP 是通用协议,适合开放性和异构环境;
RPC 是高性能专用方案,适合技术栈统一、高并发的内部服务。两者并非替代关系,而是互补共存。
例如,对外用 HTTP 提供 RESTful API,对内用 RPC 实现微服务调用,兼顾灵活性与效率。
二 、JSON-RPC
2.1 什么是JSON-RPC
JSON-RPC 是一种基于 JSON 格式的轻量级远程过程调用(RPC)协议,允许客户端通过结构化请求调用远程服务器上的方法,并获取响应结果。其核心设计目标
相关文章:
解锁 MCP 中的 JSON-RPC:跨平台通信的奥秘
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等希望看什么,评论或者私信告诉我! 文章目录 零、 背景一、RPC vs HTTP1.1 什么是RPC1.2 为什么需要 RPC?1.3 RPC 解决了什么…...
流复制(Streaming Replication)与自动故障转移(Failover)实战:用Patroni或Repmgr搭建生产级数据库集群
更多服务器知识,尽在hostol.com 嘿,各位PostgreSQL的“掌舵人”和数据“守护神”们!咱们都知道,PostgreSQL(简称PG)以其强大的功能、稳定性和开源的特性,赢得了越来越多开发者和企业的青睐。但…...

OpenGL Chan视频学习-10 Dealing with Errors in OpenGL
bilibili视频链接: 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 函数网站: docs.gl 说明: 1.之后就不再单独整理网站具体函数了,网站直接翻译会…...

美团启动618大促,线上消费节被即时零售传导到线下了?
首先,从市场推广与消费者吸引的角度来看,美团通过联合众多品牌开展大规模促销活动,并发放高额优惠券包,旨在吸引更多消费者参与购物。这种策略有助于提高平台的活跃度和交易量,同时也能够增强用户粘性。对于消费者而言…...

搭建 Select 三级联动架构-东方仙盟插件开发 JavaScript ——仙盟创梦IDE
三级级联开卡必要性 在 “东方仙盟” 相关插件开发中,使用原生 HTML 和 JavaScript 实现三级联动选择(如村庄 - 建筑 - 单元的选择)有以下好处和意义,学校管理: 对游戏体验的提升 增强交互性:玩家能够通…...

服务器如何配置防火墙管理端口访问?
配置服务器防火墙来管理端口访问,是保障云服务器安全的核心步骤。下面我将根据你使用的不同操作系统(Linux: Ubuntu/Debian/CentOS;Windows Server)介绍常用防火墙配置方法。 ✅ 一、Linux 防火墙配置(UFW / firewalld…...
Webhook入门
主要参考资料: 深入解析 Webhook:从原理到实践的全面指南: https://blog.csdn.net/weixin_43114209/article/details/144250750 目录 简介Webhook 与传统 API 调用的区别与轮询 (Polling) 的对比典型工作流程 简介 简单来说,Webhook 是一种“…...
LangChain整合Milvus向量数据库实战:数据新增与删除操作
导读:在AI应用开发中,向量数据库已成为处理大规模语义搜索和相似性匹配的核心组件。本文通过详实的代码示例,深入探讨LangChain框架与Milvus向量数据库的集成实践,为开发者提供生产级别的向量数据管理解决方案。 文章聚焦于向量数…...
LSTM+Transformer混合模型架构文档
LSTMTransformer混合模型架构文档 模型概述 本项目实现了一个LSTMTransformer混合模型,用于超临界机组协调控制系统的数据驱动建模。该模型结合了LSTM的时序建模能力和Transformer的自注意力机制,能够有效捕捉时间序列数据中的长期依赖关系和变量间的复…...
Symbol、Set 与 Map:新数据结构探秘
Symbol、Set 与 Map:新数据结构探秘 引言 ECMAScript 6 (ES6) 引入了三种强大的数据结构:Symbol、Set 与 Map,它们解决了 JavaScript 开发中的特定痛点,为我们提供了更多工具来处理复杂的数据操作。 Symbol:唯一标识…...

Spring Boot+Activiti7入坑指南初阶版
介绍 Activiti 是一个轻量级工作流程和业务流程管理 (BPM) 平台,面向业务人员、开发人员和系统管理员。其核心是一个超快且坚如磐石的 Java BPMN 2 流程引擎。它是开源的,并根据 Apache 许可证分发。Activiti 可以在任何 Java 应用程序、服务器、集群或云中运行。它与 Spri…...

如何在 Odoo 18 中创建 PDF 报告
如何在 Odoo 18 中创建 PDF 报告 Qweb 是 Odoo 强大的模板引擎,旨在轻松将 XML 数据转换为 HTML 文档。其功能特性包括基于属性的自定义、条件逻辑、动态内容插入及多样化的报告模板选项。这种多功能性使 Qweb 成为制作个性化、视觉吸引力强的报告、电子邮件和文档…...

【ROS2实体机械臂驱动】rokae xCoreSDK Python测试使用
【ROS2实体机械臂驱动】rokae xCoreSDK Python测试使用 文章目录 前言正文配置环境下载源码配置环境变量测试运行修改点说明实际运行情况 参考 前言 本文用来记录 xCoreSDK-Python的调用使用1。 正文 配置环境 配置开发环境,这里使用conda做python环境管理&…...
c/c++的opencv椒盐噪声
在 C/C 中实现椒盐噪声 椒盐噪声(Salt-and-Pepper Noise),也称为脉冲噪声(Impulse Noise),是数字图像中常见的一种噪声类型。它的特点是在图像中随机出现纯白色(盐)或纯黑色&#x…...
C++ TCP程序增加TLS加密认证
TCP为什么要增加TLS TCP程序添加TLS主要是为了解决TCP协议本身的安全缺陷。TCP作为传输层协议,虽然提供了可靠的数据传输,但它是明文传输,存在几个关键的安全问题: 数据泄露风险:TCP传输的数据完全暴露在网络中,任何能够监听网络流量的人都可以直接读取传输内容。这对于…...
构建一个“论文检索 + 推理”知识库服务,支持用户上传 PDF/LATEX 源码后,秒级检索并获得基于内容的问答、摘要、引用等功能
文章目录 1 总体目标 / Overall Goal2 数据管线 / Data Pipeline3 检索策略 / Retrieval Strategy4 服务切分 / Service Decomposition5 Agent & Prompt 设计 / Agent & Prompt6 核心功能 / Core Features7 评测与监控 / Evaluation & Monitoring8 面试亮点 / Inte…...

VLC-QT 网页播放RTSP
先看效果图,代码在文章末尾,包含源码,vlc-qt完整的库 环境说明:VS 2017 QTQt5.13.0 MSVC2017 32位 将vlc_install 目录下的bin,include,lib里所有的东西分别放在qt目录下 bin -> C:\Qt\Qt5.13.0\5.13.0\msvc2017\bin include->C:\Qt\Qt5.13.0\5.13.0\msvc201…...
for(auto a:b)和for(auto a:b)的区别
#include<iostream> using namespace std; int main() {string s( "hello world" );for (auto c:s)c t ;cout<<s<<endl; //结果为hello worldfor (auto &c:s)c t ;cout<<s<<endl; //结果为ttttttttttt }for(auto a:b)中b为一…...
第2章-12 输出三角形面积和周长(走弯路解法)
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:areas(s−a)(s−b)(s−c),其中s(abc)/2。 import math de…...
Caddy如何在测试环境中使用IP地址配置HTTPS服务
前言 在开发和测试环境中,我们经常需要搭建HTTPS服务进行测试。但通常Let’s Encrypt等证书颁发机构要求使用有效域名,不直接支持IP地址。本文将详细介绍如何使用Caddy在测试环境中通过IP地址配置HTTPS服务,使用自签名证书解决这一问题。 环…...
shell中与>和<相关的数据流重定向操作符整理
shell中与>和<相关的数据流重定向操作符整理 输出重定向操作符>>>2>2>>&> 或 >&&>> 输入重定向操作符<<<<<< 组合重定向2>&1 文件描述符相关重定向[n]< file 和 [n]> file>&- 和 <&…...

【航天远景 MapMatrix 精品教程】08 Pix4d空三成果导入MapMatrix
【航天远景 MapMatrix 精品教程】08 Pix4d空三成果导入MapMatrix 文章目录 【航天远景 MapMatrix 精品教程】08 Pix4d空三成果导入MapMatrix一、资料准备1.去畸变影像2.相机文件3.外方位元素二、创建工程1.新建工程2.导入照片3.编辑相机文件4.编辑外方位元素文件,导入外方位元…...

创建型设计模式之Prototype(原型)
创建型设计模式之Prototype(原型) 摘要: Prototype(原型)设计模式通过复制现有对象来创建新对象,避免重复初始化操作。该模式包含Prototype接口声明克隆方法、ConcretePrototype实现具体克隆逻辑ÿ…...

JNI开发流程
一. 引言 最近在做一个自己的项目,就是基于FastDDS封装一套JAVA库,让android和java应用可以使用dds的功能。 由于FastDDS是使用C编写的开源库,因此java的类库想要调用FastDDS的接口,需要额外编写一个JNI层的动态库对FastDDS的接口…...

STM32G4 电机外设篇(二) VOFA + ADC + OPAMP
目录 一、STM32G4 电机外设篇(二) VOFA ADC OPAMP1 VOFA1.1 VOFA上位机显示波形 2 ADC2.1 用ADC规则组对板载电压和电位器进行采样 3 OPAMP(运放)3.1 结合STM32内部运放和ADC来完成对三相电流的采样3.2 运放电路分析 附学习参考…...
RAG应用:交叉编码器(cross-encoder)和重排序(rerank)
文章目录 Sentence Transformers交叉编码器交叉编码器使用示例检索和重排序Sentence Transformers Sentence Transformers 支持两种类型的模型: Bi-encoders 和 Cross-encoders。Bi-encoders 更快更可扩展,但 Cross-encoders 更准确。虽然两者都处理类似的高水平任务,但何时…...

微服务难题?Nacos服务发现来救场
文章目录 前言1.什么是服务发现2.Nacos 闪亮登场2.1 服务注册2.2 服务发现 3.Nacos 的优势3.1 简单易用3.2 高可用3.3 动态配置 4.实战演练4.1安装 Nacos4.2 服务注册与发现示例代码(以 Spring Boot 为例) 总结 前言 大家好,我是沛哥儿。今天…...

C# 结合PaddleOCRSharp搭建Http网络服务
Windows打开端口: 控制面板 > 系统和安全 > 防火墙> 高级设置 → 入站规则 → 右侧选择 → 新建规则 → 端口 → 协议类型 TCP→ 端口 using System; using System.Drawing; using System.IO; using System.Net; using System.Text; using System.Threadi…...

【连接器专题】SD卡座规格书审查需要审哪些方面?
在审查SD卡座规格书时,我们需要考虑哪些方面? 首先在拿到一份SD卡座的详细规格书时,一般供应商给到的规格书中包括了一些基础信息、产品图纸信息、技术参数信息,同时有些供应商会给出产品可靠性测试报告。因此我们会从这几个要素去看规格书。 基础信息 基础信息一般会给变更…...
JS手写代码篇---手写节流函数
8、节流函数 什么是节流函数? 指规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。 与防抖函数有什么区别? 防抖函数是延…...