`
zuroc
  • 浏览: 1287363 次
  • 性别: 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}

...
 
分享到:
评论

相关推荐

    json-rpc.jar 和 jsonrpc.js

    JSON-RPC-Java是一个用Java来实现动态JSON-RPC的框架. 利用它内置的一个轻级量JSON-RPC JavaScripIt客户端,可以让你透明地在JavaScript中调用Java代码。JSON-RPC-Java可运行在Servlet容器中如Tomcat也可以运行在...

    JSON-RPC-Java实例

    JSON-RPC-Java是一个用Java来实现动态JSON-RPC的框架. 利用它内置的一个轻级量JSON-RPC JavaScripIt客户端,可以让你透明地在JavaScript中调用Java代码。JSON-RPC-Java可运行在Servlet容器中如Tomcat也可以运行在...

    json-rpc-for-java

    继《JavaScript高级应用与实践》之后推出的json-rpc-for-java开源代码,是仅仅100行的javascript代码和不到10个java文件实现的超级轻量级的通过 javaScript快速调用java对象并返回任意对象的轻量级框架,并且支持...

    android-json-rpc

    android-json-rpc是一个在android程序中使用的JSON-RPC客户端类库。它提供了一个简单的API来执行JSON-RPC服务调用

    JSON-RPC 2.0 规范(中文版)

    JSON-RPC 2.0 规范(中文版)。 JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议。 本规范主要定义了一些数据结构及其相关的处理规则。它允许运行在基于socket,http等诸多不同消息传输环境的同一进程中。其使用...

    Json-RPC for java Example

    json-rpc-for-java,是仅仅不到100行的javascript代码和不到10个java文件实现的超级轻量级的通过 javaScript快速调用java对象并返回任意对象的轻量级框架,并且支持级联调用,也就是说不需要额外 的JavaScript编程,...

    json-rpc-java-talk-20050225.pdf

    json-rpc-java-talk-20050225.pdfjson-rpc-java-talk-20050225.pdfjson-rpc-java-talk-20050225.pdfjson-rpc-java-talk-20050225.pdf

    json-rpc-1.0(with source).rar

    网上的json-rpc和它的源代码大多都不是完整的,这个里面是一一对应的,完整的源码包。里面有一个json-rpc-1.0.jar和一个json-rpc-1.0-source.jar

    JSON-RPC用户手册

    JSON-RPC用户手册

    json-rpc协议C语言版

    JSON-RPC协议的C语言版与Python语言版,源代码及示例

    JSON-RPC for Java使用说明

    JSON-RPC for Java使用说明 包括示例代码

    JSON-RPC for Java.src 2.0

    JSON-RPC for Java.src 2.0

    Json-RPC_for_Java使用说明

    JSON-RPC_for_Java使用说明

    JsonRpc-Cpp

    JsonRpc-Cpp - JSON-RPC implementation. * Copyright (C) 2008-2011 Sebastien Vincent * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser ...

    jsonrpc-frontend:前端应用程序发送 json-rpc 请求进行测试

    jsonrpc-frontend:前端应用程序发送 json-rpc 请求进行测试

    Json-RPC的PHP扩展php-ext-JsonRPC.zip

    轻量级 Json-RPC 2.0 客户端和服务端的php扩展,基于 multi_curl epoll的并发客户端,依据[jsonrpc](http://www.jsonrpc.org/)协议规范。 服务端: $server = new Jsonrpc_Server(); // style one ...

    jabsorb1.3.2及json-rpc1.0含教程.rar

    json-rpc-java-1.0.tar.gz 老版的json-rpc 用jabsorb(json) for java编写AJAX应用程序.rar 从androidguy 的BLOG摘过来的简单教程。 支持一下原创:http://androidguy.blog.51cto.com/974126/215327

    json-rpc-python

    json-rpc-python 源文件,供学习使用

    json-lib和json-rpc jar包

    json-rpc-1.0.jar和json-lib-2.1-jdk15.jar jar包,亲测可用

    Json-RPC for java中文手册

    json-rpc-for-java,是仅仅不到100行的javascript代码和不到10个java文件实现的超级轻量级的通过 javaScript快速调用java对象并返回任意对象的轻量级框架,并且支持级联调用,也就是说不需要额外 的JavaScript?...

Global site tag (gtag.js) - Google Analytics