`
zuroc
  • 浏览: 1310208 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

JSON-RPC详述

阅读更多

JSON-RPC详述

翻译者:张沈鹏 zsp007@gmail.com

本文将告诉开发者们如何实现JSON协议.

(现在正在审批JSON-RPC 1.1草案. )

= 概览 =

JSON-RPC是一个轻量级的远程调用协议.它的设计理念是:简单!

数据通讯由两部分组成.在一次连接的生命期内,一端将发出一个请求来调用另一端的函数.另一端将回应该请求,除非这个请求是一个公告.

== 请求(函数调用) ==

通过向一个远程服务器发送一个请求来调用一个远程函数.该请求是一个用JSON进行了编码(序列化)的对象.

它有3个部分:
 * 函数名
 * 参数数组
 * 标识码 - 请求的标识码是用来匹配它所对应的回复.

== 回复 ==

当调用请求结束时,服务器将回复该请求.回复同样是用JSON进行了编码的对象.

它有3个部分:

 * 返回值 - 如果发生调用错误它的值可能为空 
 * 错误信息 - 如果没错误,它为空
 * 标识码 - 和请求的标识码一致
 
== 公告 ==

公告是一种没有回复的请求.同样为用JSON编码对象.

它的标识码为空,其他和普通请求一致. 

= JSON-RPC 与传输方式无关的协议 =
本协议不限制你的使用的传输协议,不过推荐使用TCP/IP端口流(socket streams).被编码了的请求和回复通过这种字节流传输.

请求和回复随时可以发送给另一端.公告无需回复,仅当有请求时才发送回复.

结束连接回导致未答复的端的异常.无效的请求和回复讲关闭连接.

== HTTP中的JSON-RPC ==
进行一些限制,便可以通过HTTP请求来进行通讯.

Http客户端和Http服务器端间可能有多个Http请求.一个客户端可以通过一次包含多个JSON对象的HTTP POST进行多个请求,公告,回复.

服务器端必须回复所有的请求,同时可能发出新的请求或通知.客户端也要再一次通过HTTP POST响应. 

为了和服务器端再一次建立连接,客户端可能需要主动发送一次空的HTTP POST.

无效的请求会导致连接的关闭.无效的回复所有没回复的客户端的异常.关闭连接会导致所有没回复的客户端的异常.

= JSON Class演示 =

JSON中只定义了简单的数据类型.为了弥补这些不足,JSON引进了对象的属性的定义.

{"__jsonclass__":["constructor", [param1,...]], "prop1": 
...}

这个对象通过constructor的参数数组初始化,当初始化完成后,会应用它的属性(prop1, ...). 

= 通讯演示 =

--> 表示发送给服务器端的信息
<-- 服务器端的回应

service.echo("Hello JSON-RPC") 
--> { "method": "echo", "params": ["Hello JSON-RPC"], "id": 1}
<-- { "result": "Hello JSON-RPC", "error": null, "id": 1}

多重请求/回应

本例展示了一次通讯的部分内容,聊天的服务器发送给每个客户端一个公告.客户端通过请求向服务器端发送消息,通过服务器回复表示消息是否送到.
...

--> {"method": "postMessage", "params": ["Hello all!"], "id": 99}

<-- {"result": 1, "error": null, "id": 99}

<-- {"method": "handleMessage", "params": ["user1", "we were just talking"], "id": null}

<-- {"method": "handleMessage", "params": ["user3", "sorry, gotta go now, ttyl"], "id": null}

--> {"method": "postMessage", "params": ["I have a question:"], "id": 101}

<-- {"method": "userLeft", "params": ["user3"], "id": null}

<-- {"result": 1, "error": null, "id": 101}

...
 
分享到:
评论

相关推荐

    aria2-1.19.0.tar.gz

    5. **JSON-RPC和XML-RPC接口**:支持远程控制,可以与其他程序进行交互,比如通过Web界面进行管理。 6. **支持多种协议**:包括HTTP(S)、FTP(S)、SFTP、BitTorrent和Metalink等。 7. **限速和优先级设置**:允许用户...

    Python核心编程第二版

    11. **网络编程**:包括套接字编程、HTTP服务器构建、XML-RPC和JSON-RPC服务等。 12. **数据库编程**:介绍如何使用Python连接各种数据库,如SQLite、MySQL、PostgreSQL,以及ORM(对象关系映射)框架如SQLAlchemy...

    srpc-server:swoft rpcserver修改了

    3. **功能扩展**:可能增加了新的功能或特性,比如支持更多的序列化协议(如JSON-RPC、Protobuf)、支持更灵活的服务发现机制、增加熔断和限流策略等。 4. **可维护性提升**:代码重构可能也是修改的一部分,以提高...

    ocpp-j-16-specification.dl.zh-CN.docx

    - **连接**:详述客户端请求与服务器响应的过程。 - **RPC框架**:介绍远程过程调用(RPC)框架及其在不同消息类型中的应用。 - **连接、压缩、数据完整性**:涉及网络连接、数据压缩和数据完整性的保障措施。 - **...

    struts2 入门书籍

    通过集成JSON、JSON-RPC等技术,可以实现异步数据交换和页面局部刷新。 #### 11. 集成Hibernate与Spring 为了构建复杂的企业级应用,Struts2通常会与其他框架如Hibernate(用于ORM)、Spring(用于IOC和AOP)集成...

    第五课:Dubbo协议模块源码剖析1

    - **序列化方式**:将对象转换为字节流以便在网络中传输,常见的有Hessian2、Dubbo、Java、Json等。 2. **Dubbo中支持的RPC协议及其使用场景**: - **dubbo协议**:默认使用Netty作为网络传输层,Hessian2作为...

    sp与ISMP接口开发包

    这些接口通常基于标准的协议,如SOAP(Simple Object Access Protocol)、REST(Representational State Transfer)或XML-RPC(XML Remote Procedure Call),以实现数据交换和功能调用。 在“ismp-sp”这个压缩包...

    drupal6专业开发指南中文版附代码

    7. **Web服务与API**:Drupal 6支持XML-RPC和JSON等Web服务,使数据交换和集成变得简单。书中有章节介绍如何利用这些功能构建API,与其他系统集成。 8. **安全性与优化**:安全性和性能优化是任何网站开发的重要...

    Go WEB 编程

    - **RPC**:讲解远程过程调用(RPC)的概念,以及如何使用Go实现RPC服务。 #### 9. 安全与加密 - **预防CSRF攻击**:介绍跨站请求伪造(CSRF)攻击的原理,以及如何在Go中防范此类攻击。 - **确保输入过滤**:强调...

    protocol:Grakn核心和群集RPC通信协议(由gRPC支持)

    2. protobuf消息:Protocol Buffers(protobuf)是一种轻量级的数据序列化协议,用于结构化数据的序列化和反序列化,它比JSON更紧凑且效率更高。 3. Stub:gRPC自动生成服务端和客户端的Stub代码,开发者只需关注...

    pbbook

    4. **语言绑定**:详述如何使用PB生成不同编程语言的代码,如C++、Java、Python等,并展示实际编程示例。 5. **RPC服务**:介绍gRPC,这是一个基于HTTP/2和PB的高性能、开源的RPC框架,如何利用PB构建gRPC服务,...

    Java-SpringBoot的分布式架构网上购物商城系统毕业设计源码(源代码+论文)

    3. **微服务通信**:使用RESTful接口或RPC(如Dubbo、gRPC)进行服务间通信,确保数据的高效传输。 4. **数据一致性**:通过分布式事务解决方案(如2PC、TCC、Saga等)处理跨服务的事务操作,确保数据的一致性。 5...

Global site tag (gtag.js) - Google Analytics