解鎖 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
繁體地址,請注明出處:http://hk.pswp.cn/web/81345.shtml
英文地址,請注明出處:http://en.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…