解锁 MCP 中的 JSON-RPC:跨平台通信的奥秘

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益:

  1. 了解大厂经验
  2. 拥有和大厂相匹配的技术等

希望看什么,评论或者私信告诉我!

文章目录

    • 零、 背景
    • 一、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)协议,允许客户端通过结构化请求调用远程服务器上的方法,并获取响应结果。其核心设计目标

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/81345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】第1节|Redis服务搭建

一、Redis 基础概念 核心功能 内存数据库,支持持久化(RDB/AOF)、主从复制、哨兵高可用、集群分片。常用场景:缓存、分布式锁、消息队列、计数器、排行榜等。 安装环境 依赖 GCC 环境(C语言编译)&#xff0…

GitLab-CI简介

概述 持续集成(CI)和 持续交付(CD) 是一种流行的软件开发实践,每次提交都通过自动化的构建(测试、编译、发布)来验证,从而尽早的发现错误。 持续集成实现了DevOps, 使开发人员和运维人员从繁琐的工作中解…

FFmpeg解码器配置指南:为什么--enable-decoders不能单独使用?

FFmpeg解码器配置指南 在FFmpeg的编译配置过程中,许多开发者会遇到关于解码器配置的困惑。特别是--enable-decoders这个选项,很多人误以为启用它就能自动包含所有解码器。本文将深入解析FFmpeg解码器配置的机制,并通过实际测试展示正确的配置…

C++多态与虚函数

C++多态与虚函数详解 多态(Polymorphism)是 C++ 面向对象编程的重要特性,通过统一的接口实现不同的行为。虚函数(Virtual Function)是实现运行时多态的核心机制。以下从多态的构成条件、意义、析构函数的虚函数化、纯虚函数和抽象类,以及虚函数表的底层实现依次介绍。 1.…

游戏引擎学习第313天:回到 Z 层级的工作

回顾并为今天的内容定下基调 昨天我们新增了每个元素级别的排序功能,并且采用了一种我们认为挺有意思的方法。原本计划采用一个更复杂的实现方式,但在中途实现的过程中,突然意识到其实有个更简单的做法,于是我们就改用了这个简单…

ODBC简介

ODBC(Open Database Connectivity)是一个由 Microsoft 制定的标准接口,允许不同的应用程序通过统一的方式访问各种数据库系统。 🧠 简单理解: ODBC 就像是 “翻译官”,在应用程序(如 Excel、Py…

RK3588 buildroot QT 悬浮显示(OSD)

概述 主要介绍在rockchip rk3588 buildroot中 运行QT程序。需要结合之前的文档:认识DRM显示系统、buildroot中QT开发指导、以及如何集成QT库到3588板子上。 场景:在linux开发中,需要使用QT开发程序,做OSD显示。(如下图显示,显示器播放视频,QT页面悬浮于视频上方,显示…

sockaddr_in

在网络编程中&#xff0c;sockaddr_in 结构体是用于表示 IPv4 地址的套接字地址结构。它定义在 <netinet/in.h> 头文件中&#xff0c;是 sockaddr 结构体的一个特化版本&#xff0c;专门用于处理 IPv4 地址。 下面是 sockaddr_in 结构体的典型定义&#xff1a; struct …

有铜半孔工艺的制造难点与工艺优化

技术难点剖析 有铜半孔工艺在制造过程中面临多重挑战&#xff0c;主要集中在材料加工精度、孔壁完整性及良率控制三个方面&#xff1a; 铜层翘起与毛刺残留 半孔成型时&#xff0c;铣刀高速切割可能导致孔壁铜层被拉扯&#xff0c;产生翘起或残留铜屑&#xff0c;影响导电性能…

云原生安全:网络协议TCP详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 &#xff08;注&#xff1a;文末附可视化流程图与专有名词说明表&#xff09; 1. 基础概念 TCP&#xff08;Transmission Control Protocol&#xff09;是…

Dify中的Extension插件开发例子:以neko为例

本文使用Dify v1.0.0-beta.1版本。以neko为例&#xff0c;介绍Dify中的Extension插件开发例子。需要说明的是Dify官方要求Python≥3.12&#xff0c;但发现本地PyCharm调试Python≥3.12有问题&#xff0c;就采用的Python 3.11版本。 一.Extension插件项目创建 1.填写插件信息 …

Linux中logger命令的使用方法详解

文章目录 一、基础语法二、核心功能选项三、‌设施与优先级对照‌1. 常用设施&#xff08;Facility&#xff09;2. 优先级&#xff08;Priority&#xff09;从低到高&#xff1a;3. 组合示例‌ 四、典型使用场景1. 记录简单消息2. 带标签和优先级3. 记录命令输出4. 发送到远程服…

【图论 并集查找】P3671 [USACO17OPEN] Where‘s Bessie? S|普及+

本文涉及知道点 C图论 C并集查找 预计2025年5月29号 7:00发布 P3671 [USACO17OPEN] Where’s Bessie? S 题目描述 Farmer John 一直以精通技术而闻名&#xff0c;他正在测试他的新型无人机搭载的奶牛定位相机。这款相机据说可以拍摄他的田地并自动确定奶牛的位置。不幸的是…

《软件工程》第 13 章 - 软件维护

知识思维导图 13.1 软件维护与进化的概念 1. 核心概念 软件维护&#xff1a;软件交付使用后&#xff0c;为纠正错误、改善性能或其他属性而进行的修改过程软件进化&#xff1a;随着时间推移&#xff0c;软件系统为适应环境变化和用户需求而不断演变的过程 2. 维护类型&#…

AI Agent助力医疗科研突破

最近&#xff0c;AI Agent在医疗科研领域的突破格外引人注目。非营利组织Future House宣布其多智能体系统Robin在约10周内&#xff0c;为干性年龄相关性黄斑变性&#xff08;dAMD&#xff09;发现了一种潜在新疗法&#xff0c;这一成果展示了AI在加速科学发现&#xff0c;特别是…

(高级)高级前端开发者指南:框架运用与综合实战

当您已经掌握了HTML5、CSS3和JavaScript的基础知识后&#xff0c;接下来就是学习现代前端框架和性能优化的高级阶段。本文将重点介绍Vue.js/React的组件化开发、状态管理和路由配置&#xff0c;以及前端性能优化的核心技巧。通过丰富的代码示例和详细讲解&#xff0c;帮助您在实…

提示词写的好,用VSCODE+python+Claude3.5开发edge扩展插件(2)

导入文件夹: 导入扩展成功: 通过网盘分享的文件&#xff1a;Meteor New Tab.zip 链接: https://pan.baidu.com/s/1fXOhuoYboO_Afzqhuo5Eew?pwdxeix 提取码: xeix edge收藏夹书签过多时在扩展显示可以搜索筛选,

CUDA加速的线性代数求解器库cuSOLVER

cuSOLVER是NVIDIA提供的GPU加速线性代数库&#xff0c;专注于稠密和稀疏矩阵的高级线性代数运算。它建立在cuBLAS和cuSPARSE之上&#xff0c;提供了更高级的线性代数功能。 cuSOLVER主要功能 1. 稠密矩阵运算 矩阵分解: LU分解 (gesvd) QR分解 (geqrf) Cholesky分解 (potrf…

Redis之金字塔模型分层架构

在分布式系统架构中&#xff0c;Redis 凭借其卓越的读写性能成为缓存层的核心组件。但如何精准判断数据是否适合进入 Redis&#xff0c;以及如何科学量化 “高频查询” 标准&#xff0c;始终是高性能系统设计的关键课题。 数据访问特征金字塔模型是用于评估数据是否适合进入 R…

JVM 垃圾回收机制深度解析(含图解)

JVM 垃圾回收机制深度解析&#xff08;含图解&#xff09; 一、垃圾回收整体流程 垃圾回收图解 #mermaid-svg-KPtxlwWntQx8TOj3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-KPtxlwWntQx8TOj3 .error-icon{fill…