当前位置: 首页 > 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 字段)
  • 加入 方法权限控制(如认证)
  • 支持异步调用或多线程并发

http://www.xdnf.cn/news/44461.html

相关文章:

  • Linux中的信号量
  • 健身房管理系统设计与实现(springboot+ssm+vue+mysql)含万字详细文档
  • 01.04、回文排序
  • AI日报 - 2025年04月21日
  • 高效获取淘宝实时商品数据:API 接口开发与数据采集实战指南
  • Vue3核心源码解析
  • nvm管理node版本 与 nvm常用指令的使用
  • SpringBoot3集成ES8.15实现余额监控
  • Docker镜像仓库
  • 深拷贝和浅拷贝的区别
  • React Router V7使用详解
  • LeetCode[232]用栈实现队列
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用类矩阵QRect)
  • Hello, Dirty page
  • 【Flutter】使用LiveKit和Flutter构建实时视频聊天应用
  • Linux操作系统--进程的创建和终止
  • java面试篇(常见的集合底层原理)
  • 中国占全球工业机器人装机量的52%,国产机器人崛起加速洗牌,拆分机器人业务独立上市,软硬件协同增强,AI工业机械臂催生业务再增长
  • Opencv图像处理:轮廓检测、轮廓近似、绘制外接圆外接矩形
  • Linux学习——TCP
  • Viper配置管理笔记
  • 基于springboot+vue的仓库管理系统
  • AI日报 - 2025年04月19日
  • 《Operating System Concepts》阅读笔记:p748-p748
  • C# 类型、存储和变量(用户定义类型)
  • python pdf转图片再OCR
  • WebSocket启用备忘
  • 【C++】类和对象之日期类的实现(构造、运算符重载)
  • Deepseek输出的内容如何直接转化为word文件?
  • PFLM: Privacy-preserving federated learning with membership proof证明阅读