当前位置: 首页 > news >正文

JSON-RPC远程控制

文章目录

    • 🌐 一、什么是 JSON-RPC?
    • 📬 二、通信过程
      • 1️⃣ 客户端发起请求
      • 2️⃣ 服务端处理请求,调用方法,返回结果
    • 📑 三、重要字段说明
    • 🛠️ 四、核心函数与概念(结合你的代码)
      • 📤 客户端发送请求函数(如 `rpc_add`)
      • 📥 服务端处理请求函数(如 `add()`)
    • 🔁 五、通信流程详解
    • 📚 六、常见 JSON-RPC 用法场景
    • 🧱 七、常用 JSON-RPC C语言库
    • 🧩 八、扩展建议


我们来系统讲解一下 JSON-RPC 协议,包括它的 核心概念、通信过程、重要字段、常用函数/库,并结合你给的示例代码来加深理解。


🌐 一、什么是 JSON-RPC?

JSON-RPC(JSON Remote Procedure Call) 是一种基于 JSON 的远程过程调用协议,它允许你通过网络调用远程系统中的函数/方法。

它具有以下特点:

  • 轻量级:只使用 JSON,无需 XML 或复杂的结构。
  • 与平台无关:任何支持 JSON 的语言都可实现。
  • 双向通信:既可请求调用,也可异步响应。

📬 二、通信过程

JSON-RPC 基于客户端-服务器模式,主要包含以下步骤:

1️⃣ 客户端发起请求

{"jsonrpc": "2.0","method": "add","params": [1, 2],"id": 1
}

2️⃣ 服务端处理请求,调用方法,返回结果

{"jsonrpc": "2.0","result": 3,"id": 1
}

或者若出错,返回:

{"jsonrpc": "2.0","error": {"code": -32601,"message": "Method not found"},"id": 1
}

📑 三、重要字段说明

字段类型说明
jsonrpcstring固定值 "2.0"
methodstring要调用的远程函数名称
paramsarray/object传入参数
idstring/int客户端提供的 ID,服务端用于关联响应
result任意类型成功调用返回值(响应中)
errorobject调用失败时的错误信息(响应中)

🛠️ 四、核心函数与概念(结合你的代码)

📤 客户端发送请求函数(如 rpc_add

  • 构造 JSON 字符串:用 sprintf() 写入 JSON-RPC 格式
  • 通过 TCP socket 发送数据
  • 接收响应后,用 cJSON_Parse() 解析 JSON
sprintf(buf, "{\"method\": \"add\", \"params\": [%d,%d], \"id\": \"2\" }", a, b);
send(socket, buf, ...);
read(socket, buf, ...);
cJSON *root = cJSON_Parse(buf);
cJSON *result = cJSON_GetObjectItem(root, "result");

📥 服务端处理请求函数(如 add()

  • 使用 JSON-RPC 库 jrpc_server_init() 初始化服务
  • 使用 jrpc_register_procedure() 注册函数名和回调
  • 回调函数内部通过 cJSON 提取参数,构造响应 JSON
cJSON *a = cJSON_GetArrayItem(params, 0);
cJSON *b = cJSON_GetArrayItem(params, 1);
return cJSON_CreateNumber(a->valueint + b->valueint);

🔁 五、通信流程详解

假设客户端要调用远程函数 add(2, 3)

      Client                             Server│                                   ││--- JSON 请求(add) -------------->││   {"method": "add",              ││    "params": [2,3], "id": 1}     ││                                   ││                          查找方法 add│                          调用函数 add(2,3)│                          构造 JSON 返回值│<-- JSON 响应 --------------------││   {"result": 5, "id": 1}         ││                                   ││   解析 JSON → 输出结果           │

📚 六、常见 JSON-RPC 用法场景

场景示例
嵌入式设备远程控制通过 RPC 控制 LED、读取传感器
前后端通信浏览器与后端服务使用 JSON-RPC over WebSocket
自动化测试平台使用 JSON-RPC 调用接口模拟用户行为
区块链(如以太坊)Ethereum 节点之间通信使用 JSON-RPC API

🧱 七、常用 JSON-RPC C语言库

库名说明
jsonrpc-c你使用的轻量 JSON-RPC C 实现
cJSON轻量级 JSON 解析/生成库
jansson更完整的 JSON C 解析库

🧩 八、扩展建议

  • 加入 JSON-RPC 的 通知模式(即没有 id
  • 增加 错误处理机制(返回 error 字段)
  • 加入 方法权限控制(如认证)
  • 支持异步调用或多线程并发

相关文章:

  • AI与思维模型【69】——人类误判心理
  • 方案精读:数字政府智慧政务服务一网通办服务解决方案【附全文阅读】
  • 【Oracle专栏】删除用户 释放表空间
  • 架构师面试(三十四):IM 假在线
  • Linux 文件系统目录结构详解
  • 什么是 IDE?集成开发环境的功能与优势
  • 基于springboot+vue的仓库管理系统
  • AWS Linux快速指南:5分钟搭建多用户图形界面
  • 使用 Docker Swarm 纳管节点并实现容器通信
  • 【网络】数据链路层知识梳理
  • Hi3518E官方录像例程源码流程分析(四)
  • 【NLP 62、实践 ⑮、基于RAG + 智谱语言模型的Dota2英雄故事与技能介绍系统】
  • 13【生命周期·进阶】省略规则与静态生命周期 (`‘static`)
  • 08【工具赋能】深入 Cargo:依赖管理、构建配置与工作空间 (Workspace)
  • C++类继承关键点总结
  • MySQL数据库(基础篇)
  • 量子计算与经典计算融合:开启计算新时代
  • 读一篇AI论文并理解——通过幻觉诱导优化缓解大型视觉语言模型中的幻觉
  • UE5 UI 教程系列全集
  • llama factory
  • 纪念沈渭滨︱在恩师沈渭滨老师指导下走上学术研究之路
  • 从6家试点扩展至全行业,券商并表监管有何看点?
  • 郑州一废弃饭店堆砌物起火:明火被扑灭,未造成人员伤亡
  • 马上评丨直播员工上班?职场不是“楚门的世界”
  • 青岛市政协原副主席杨锡祥一审被控受贿3763万余元
  • 履新正部级的李成钢,现已担任商务部党组副书记