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-Java是一个用Java来实现动态JSON-RPC的框架. 利用它内置的一个轻级量JSON-RPC JavaScripIt客户端,可以让你透明地在JavaScript中调用Java代码。JSON-RPC-Java可运行在Servlet容器中如Tomcat也可以运行在...
JSON-RPC-Java是一个用Java来实现动态JSON-RPC的框架. 利用它内置的一个轻级量JSON-RPC JavaScripIt客户端,可以让你透明地在JavaScript中调用Java代码。JSON-RPC-Java可运行在Servlet容器中如Tomcat也可以运行在...
继《JavaScript高级应用与实践》之后推出的json-rpc-for-java开源代码,是仅仅100行的javascript代码和不到10个java文件实现的超级轻量级的通过 javaScript快速调用java对象并返回任意对象的轻量级框架,并且支持...
android-json-rpc是一个在android程序中使用的JSON-RPC客户端类库。它提供了一个简单的API来执行JSON-RPC服务调用
JSON-RPC 2.0 规范(中文版)。 JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议。 本规范主要定义了一些数据结构及其相关的处理规则。它允许运行在基于socket,http等诸多不同消息传输环境的同一进程中。其使用...
json-rpc-for-java,是仅仅不到100行的javascript代码和不到10个java文件实现的超级轻量级的通过 javaScript快速调用java对象并返回任意对象的轻量级框架,并且支持级联调用,也就是说不需要额外 的JavaScript编程,...
json-rpc-java-talk-20050225.pdfjson-rpc-java-talk-20050225.pdfjson-rpc-java-talk-20050225.pdfjson-rpc-java-talk-20050225.pdf
网上的json-rpc和它的源代码大多都不是完整的,这个里面是一一对应的,完整的源码包。里面有一个json-rpc-1.0.jar和一个json-rpc-1.0-source.jar
JSON-RPC用户手册
JSON-RPC协议的C语言版与Python语言版,源代码及示例
JSON-RPC for Java使用说明 包括示例代码
JSON-RPC for Java.src 2.0
JSON-RPC_for_Java使用说明
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 请求进行测试
轻量级 Json-RPC 2.0 客户端和服务端的php扩展,基于 multi_curl epoll的并发客户端,依据[jsonrpc](http://www.jsonrpc.org/)协议规范。 服务端: $server = new Jsonrpc_Server(); // style one ...
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-1.0.jar和json-lib-2.1-jdk15.jar jar包,亲测可用
json-rpc-for-java,是仅仅不到100行的javascript代码和不到10个java文件实现的超级轻量级的通过 javaScript快速调用java对象并返回任意对象的轻量级框架,并且支持级联调用,也就是说不需要额外 的JavaScript?...