【FFH】OpenHarmony啃论文成长计划---JSON-RPC 原创 精华

Hagon
发布于 2022-2-15 17:12
浏览
3收藏

春节不停更,此文正在参加「星光计划-春节更帖活动」
@TOC

大家好! 我是来自深圳技术大学FSR实验室的同学,标题FFH就是FSRlab For Harmony!并且我也正在参加OpenHarmony成长计划从论文到开源提交研究,以后我们也会陆续在这个社区记录学习心得和体会。

参考文献

JSON-RPC协议分析、扩展及其应用–《中国科技论文在线》2008年02期 (cnki.com.cn)

Web-Based Service Optimization with JSON-RPC Platform in Java and PHP | Haji | International Conference on Engineering and Technology Development (ICETD) (ubl.ac.id)

引言

​ 最近在看JSON相关的文献和资料,前面我也写了两篇JSON相关的文章(有兴趣的同学可以去看看):
OpenHarmony啃论文成长计划—为什么JSON将逐渐取代XML?
OpenHarmony啃论文成长计划—几种常见的JSON解析器比较

像我这种有一点小程序或者web开发经验的会对JSON很熟悉,因为我们前端经常把信息格式化为JSON,再调用后端的API进行数据传递,我们也清楚的知道web服务那一套基本都是基于HTTP协议的,偶尔使用的是socket进行通信。但是最近在学习手机APP的开发,并且接触到了一些分布式的系统,发现JSON也可以通过RPC作为分布式系统的数据交换格式,也是这篇文章将要叙述的,称为JSON-RPC,下面我们来具体看一下什么是RPC以及什么是JSON-RPC.

RPC

​ 先来了解一下什么是RPC,相信大家会混淆RPC和HTTP,其实他们两个并不是同一层级的概念,RPC : Remote Procedure Call ,其实是一个很宽泛的概念名称,翻译过来就是远程过程调用,说白了就是一个机器远程调用并执行另一个机器上的函数。而HTTP是一种协议,HTTP是属于一种RPC的实现方式。
首先我们区分一下几种协议之间的关系,RPC并没有要求底层实现,大家都知道HTTP协议是处于应用层,TCP/UDP协议是在传输层,而RPC可以基于HTTP协议,也可以基于TCP或者UDP协议实现,也可以看出他们并不处于同一层级

【FFH】OpenHarmony啃论文成长计划---JSON-RPC-鸿蒙开发者社区【FFH】OpenHarmony啃论文成长计划---JSON-RPC-鸿蒙开发者社区【FFH】OpenHarmony啃论文成长计划---JSON-RPC-鸿蒙开发者社区

在HarmonyOS有很多地方都用到了RPC方式通信,比如跨设备调用,远程拉起FA,FA的迁移流转等等。

JSON-RPC

摘要

​ 一般应用程序需要本地以外的其他方提供信息。但是这些应用程序可能使用的是不同的系统或者平台上。在2012年的时候,web开发上有一种技术可以使用,通常称为web service。而在应用程序中,JSON-RPC是web service(当时标准的webservice是XML-RPC)的替代方案之一。比如有两个信息互通的应用程序,在信息传递过程中,应用程序可以执行来自远程后端服务器的业务,以实现两个程序直接的通信,即通过使用JSON-RPC来实现web服务。原理如图:
【FFH】OpenHarmony啃论文成长计划---JSON-RPC-鸿蒙开发者社区
【FFH】OpenHarmony啃论文成长计划---JSON-RPC-鸿蒙开发者社区

什么是JSON-RPC?

​ RPC是一个简单的协议框架,所以可以用来构建一个基于web的服务的新协议。RPC允许一个应用程序调用远程另外一个处于不同系统的程序的子进程,RPC在传递数据过程中使用一种特定的数据交换格式,如XML或JSON,作为系统之间的粘合剂。传输中数据交换格式为JSON格式RPC 协议就称为JSON-RPC

​ 官方的定义是:JSON-RPC 是一个无状态的轻量级的 RPC 协议。就是说JSON-RPC 是一种远程过程调用协议。通常的处理机制是在两个通信实体之间建立点对点的数据连接,在连接的生命周期内,一方可能调用另一方提供的方法,客户端发送一个请求,而服务器端给出与之相对应的响应。其原理如图所示:

【FFH】OpenHarmony啃论文成长计划---JSON-RPC-鸿蒙开发者社区【FFH】OpenHarmony啃论文成长计划---JSON-RPC-鸿蒙开发者社区

JSON-RPC的数据结构

​ 比如现在我们需要实现一个减法的功能,服务器和本地相互传递的数据结构很简单,如下:

【FFH】OpenHarmony啃论文成长计划---JSON-RPC-鸿蒙开发者社区【FFH】OpenHarmony啃论文成长计划---JSON-RPC-鸿蒙开发者社区

​ 从本质上讲,请求是通过方法名参数唯一id发送的。id很重要,尤其是当分布式系统处理来自多个源的多个请求时,因为它告诉被请求系统请求来自何处,这样才能使响应结果给到正确的请求者。

JSON-RPC与HTTP的区别

应用场景上来看,大型企业内部会使用RPC,而对外暴露的接口都是HTTP的。前面也说了,这两个不在同一层级,HTTP协议处于相对底层的位置。

而RPC可以看成是基于各种协议的二次封装(类似SDK),因此RPC可以简化程序员的工作,但是相对地需要对环境有依赖,脱离了特定环境就无法使用,因此RPC相对HTTP具有局限性,其需要在统一地框架环境下使用。
这也是为什么大型企业内部会使用RPC,而跨企业应用或者对外暴露地接口会使用HTTP
总的来说,RPC和HTTP都是远程调用接口,从要实现的动作上来看没有太大的区别,最大的区别就是封装的层级不同,RPC封装的层级更加的高,因此相对HTTP,得到了很强的易用性,但是也丧失了一定的灵活性适应性.

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
JSON-RPC.zip 862.88K 20次下载
已于2022-2-17 16:52:46修改
7
收藏 3
回复
举报
1条回复
按时间正序
/
按时间倒序
红叶亦知秋
红叶亦知秋

头一次知道RPC的概念,涨知识了

回复
2022-2-15 17:42:46
回复
    相关推荐