- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于JSON轻量级分布式通信协议研究
基于JSON轻量级分布式通信协议研究
【摘 要】本文在介绍JSON技术的基础上,提出一种基于JSON的轻量级分布式通信协议。
【关键词】JSON;分布式通信
一、引言
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式[1-3]。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。JSON采用完全独立于语言的文本格式,使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言,易于阅读和编写,同时也易于机器解析和生成。
本文尝试将JSON应用于分布式系统通信协议,提出基于JSON的分布式系统数据交互模型。
二、JSON介绍
JSON有两种基本语法结构[1-2]:
“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)等。如图1所示。
值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。如图2所示。
图1 JSON对象
图2 JSON有序列表(数组)
例如,{“姓名”:”张三”, “年龄”:30}是一个JSON对象,[1, “JSON”, {“姓名”:”张三”, “年龄”:30}]是JSON数组。
与XML相比,两者均有很好的可读性、可扩展性,但在有效数据率及编码解码难度方面,JSON拥有明显的优势。
三、基于JSON的通信模型
基于JSON的分布式通信协议模型如图3所示。
图3 基于JSON的分布式通信模型
1. JSON编码/解码
JSON 编码/解码模块(JSON E/D)用于将对象转化为JSON串,同时负责解析JSON字符串为对象。它是本通信协议的核心,部署于需要通信的两个或多个分布式组件中,作为底层基础模块。
本模块包含如下重要组件:
JSON编码与解码组件;负责JSON编解码工作。
JSON通用类JSONObject;JSONObject是JSON通用类,兼容存储JSON对象与JSON数组,用户可扩展自该类型。
JSON类型映射;负责将JSON通用类映射为用户类型。
2. 基本通信流程
大致的通信流程如下:
(1)客户端发起访问时,经由JSON编码器将参数封装成JSON格式,并传递给服务器端;
(2)服务器端接收到客户端请求时,解析JSON为对象,并根据对象信息,访问相应的服务入口;
(3)将服务返回值或异常信息重新封装为JSON串,并传递给客户端;
(4)客户端JSON E/D模块解析JSON串,并把结果传给实际调用方法。
四、核心算法
1. JSONObject
JSONObject是JSON通用类,是通信的基础,主要包含如下成员或属性:
serviceURI:标识要访问的URI。
classType:标识传输的对象类型串。
members:成员或属性集合,用于保存JSON对象或JSON数组。
2. JSON编码
JSON编码实现从任意对象到JSON串的转化,算法如下:
JSON编码算法
输入:对象
输出:字符串
算法:
1)判断输入是否为数组或集合,若是,则逐个取出元素执行2-4步骤;否则执行2-4;
2)使用仿射机制,取出所有成员列表,并逐个执行3-4步骤;
3)若成员值为集合,则递归调用本算法生成字符串再嵌入;否则转4;
4)将成员按“名称/值”直接编码生成字符串;
5)返回编码后的字符串。
3. JSON解码
JSON解码实现从字符串到对象转化,算法如下:
JSON解码算法
输入:字符串
输出:对象(普通对象或数组)
算法:
1)将字符串根据JSON规则解析成JSONObject对象;
2)若classType为空,或者classType不存在,则返回JSONObject;否则转3;
3)动态加载classType类型,使用仿射机制,将members中与classType同名的成员关联起来,并根据数据类型进行转化;
4)返回cl
原创力文档


文档评论(0)