OpenHarmony 啃论文成长计划——JSON-RPC(上篇)(转载)

OpenHarmony 啃论文成长计划——JSON-RPC(上篇)(转载)

作者简介

HagonChan,陈汉武,来自深圳技术大学的大二学生。目前在学校FSR实验室学习OpenHarmony及HarmonyOS北向应用开发、web以及小程序前端开发以及区块链智能合约开发,具有小程序开发经验。从上一个寒假开始正式投入到鸿蒙系统的学习中,后续仍会持续投入精力继续深入学习。目前正在参加OpenHarmony“啃论文”的成长计划,并输出过学习博客,得到广大开发者的好评。FFH是FSRlab For Harmony的首字母缩写。

本期看点

  • RPC是什么?JSON-RPC呢?
  • 它和HTTP有什么区别?
  • JSON-RPC和Web Service什么关系

第一章 RPC的基本概念

相信大家不管是在OpenHarmony应用开发,Web开发或者小程序开发,都会用JSON或者XML进行数据的传输,大家对这两个技术的使用并不陌生,但是我们往往只是局限在使用上,所以在阐述为什么XML会被JSON取代之前,我想先把这两个东西的起源和由来都给大家简单的科普一遍。

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

在上图中列了几个常用的RPC框架,其中:

  • Thrift:是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、JavaScript、Node.js、Smalltalk以及OCaml这些编程语言间无缝结合的、高效的服务。
  • gRPC:一开始由google开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。
  • Dubbo:Dubbo是一个分布式服务框架,以及SOA(面向服务框架Service-Oriented Architecture的英文首字母缩写)治理方案。其功能主要包括:高性能NIO(Non-blocking Input Output,非阻塞式的输入和输出)通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,自2011年开源后,已被许多非阿里系公司使用。
  • JSON-RPC:是一个无状态且轻量级的RPC协议,其传输内容以JSON(JavaScript Object Notation)方式,相对于一般的HTTP请求通过URI(Uniform Resource Identifier,统一标识资源符)调用远程服务器。

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

第二章 JSON-RPC

2.1 引言一般应用程序需要本地以外的其他方提供信息。但是这些应用程序可能使用的是不同的系统或者平台上。2012年,在Web开发上有一种技术可以使用,通常称为网络服务(Web Service)。而在应用程序中,JSON-RPC是Web Service(当时标准的WebService是XML-RPC)的替代方案之一。比如有两个信息互通的应用程序,在信息传递过程中,应用程序可以执行来自远程后端服务器的业务,以实现两个程序直接的通信,即通过使用JSON-RPC来实现web服务。原理如图:

2.2 什么是JSON-RPCRPC允许一个应用程序调用远程另外一个处于不同系统的程序的子进程,RPC在传递数据过程中使用一种特定的数据交换格式,如XML或JSON,作为系统之间的粘合剂。传输中数据交换格式为JSON格式的RPC协议就称为JSON-RPC。官方的定义是:JSON-RPC是一个无状态的轻量级的RPC协议,也就是说JSON-RPC是一种远程过程调用协议。通常的处理机制是在两个通信实体之间建立点对点的数据连接,在连接的生命周期内,一方可能调用另一方提供的方法,客户端发送一个请求,而服务器端给出与之相对应的响应。其原理如图所示:

2.3 JSON-RPC的的数据结构

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

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

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

而RPC可以看成是基于各种协议的二次封装(类似SDK),因此RPC可以简化程序员的工作,但是相对地需要对环境有依赖,脱离了特定环境就无法使用,因此RPC相对HTTP具有局限性,其需要在统一地框架环境下使用。

这也是为什么大型企业内部会使用RPC,而跨企业应用或者对外暴露地接口会使用HTTP。

总的来说,RPC和HTTP都是远程调用接口,从要实现的动作上来看没有太大的区别,最大的区别就是封装的层级不同,RPC封装的层级更加的高,因此相对HTTP,得到了很强的易用性,但是也丧失了一定的灵活性和适应性.

全文缩略语汇总

缩写英文中文
RPCRemote Procedure Call远程过程调用
HTTPHyperText Transfer Protocol超文本传输协议
TCPTransmission Control Protocol传输控制协议
UDPUser Datagram Protocol 用户数据报协议
URIUniform Resource Identifier统一资源标志符
JSONJavaScript Object Notation
PHPHypertext Preprocessor超文本预处理器
SOAService-Oriented Architecture面向服务架构
NIONon-blocking Input Output非阻塞式的输入和输出
FAFeature Ability特性能力
HTMLHyperText Markup Language超文本标记语言
XMLEXtensible Markup Language可扩展标记语言
SDKSoftware development kit软件开发套件

后期预告

OpenHarmony啃论文成长计划—为什么JSON将逐渐取代XML?(中篇)

OpenHarmony啃论文成长计划—几种常见的JSON解析器比较(下篇)

参考文献

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

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

写在最后

OpenHarmony 成长计划—“啃论文俱乐部”(以下简称“啃论文俱乐部”)是在 2022年 1 月 11 日的一次日常活动中诞生的。截至 3 月 31 日,啃论文俱乐部已有 87 名师生和企业导师参与,目前共有十二个技术方向并行探索,每个方向都有专业的技术老师带领同学们通过啃综述论文制定技术地图,按“降龙十八掌”的学习方法编排技术开发内容,并通过专业推广培养高校开发者成为软件技术学术级人才。

啃论文俱乐部的宗旨是希望同学们在开源活动中得到软件技术能力提升、得到技术写作能力提升、得到讲解技术能力提升。大学一年级新生〇门槛参与,已有俱乐部来自多所高校的大一同学写出高居榜首的技术文章。

如今,搜索“啃论文”,人们不禁想到、而且看到的都是我们——OpenHarmony 成长计划—“啃论文俱乐部”的产出。

OpenHarmony开源与开发者成长计划—“啃论文俱乐部”学习资料合集

1)入门资料:啃论文可以有怎样的体验  

https://docs.qq.com/slide/DY0RXWElBTVlHaXhi?u=4e311e072cbf4f93968e09c44294987d

2)操作办法:怎么从啃论文到开源提交以及深度技术文章输出https://docs.qq.com/slide/DY05kbGtsYVFmcUhU  

3)企业/学校/老师/学生为什么要参与 & 啃论文俱乐部的运营办法https://docs.qq.com/slide/DY2JkS2ZEb2FWckhq

 4)往期啃论文俱乐部同学分享会精彩回顾: 

同学分享会No1.成长计划啃论文分享会纪要(2022/02/18)  https://docs.qq.com/doc/DY2RZZmVNU2hTQlFY  

同学分享会No.2 成长计划啃论文分享会纪要(2022/03/11)  https://docs.qq.com/doc/DUkJ5c2NRd2FRZkhF  

同学们分享会No.3 成长计划啃论文分享会纪要(2022/03/25) 

https://docs.qq.com/doc/DUm5pUEF3ck1VcG92?u=4e311e072cbf4f93968e09c44294987d

现在,你是不是也热血沸腾,摩拳擦掌地准备加入这个俱乐部呢?当然欢迎啦!啃论文俱乐部向任何对开源技术感兴趣的大学生开发者敞开大门。

后续,我们会在服务中心公众号陆续分享一些 OpenHarmony 开源与开发者成长计划—“啃论文俱乐部”学习心得体会和总结资料。记得呼朋引伴来看哦。

扫码添加 OpenHarmony 高校小助手,加入“啃论文俱乐部”微信群