一、JsonRPC介绍
json-rpc是基于json的跨语言远程调用协议,比xml-rpc、webservice等基于文本的协议传输数据格小;相对hessian、Java-rpc等二进制协议便于调试、实现、扩展,是非常优秀的一种远程调用协议。
二、JsonRPC简单说明
1、调用的Json格式
向服务端传输数据格式如下:
{ "method": "方法名", "params": [“参数数组”], "id": 方法ID}
说明:
第一个参数: 是方法的名值对
第二个参数: 是参数数组
第三个参数: 是方法ID(可以随意填)
举例:{ "method": "doSomething", "params": [], "id": 1234}
doSomething 是远程对象的方法, [] 表示参数为空
2、输出的Json格式
{
"jsonrpc": "2.0",
"id": "1234",
"result": null
}
三、python-jsonrpc框架
1、安装
pip install python-jsonrpc
2、例子
http服务端:
#!/usr/bin/env python
# coding: utf-8
import pyjsonrpc
class RequestHandler(pyjsonrpc.HttpRequestHandler):
@pyjsonrpc.rpcmethod
def add(self, a, b):
"""Test method"""
return a + b
# Threading HTTP-Server
http_server = pyjsonrpc.ThreadingHttpServer(
server_address = ('localhost', 8080),
RequestHandlerClass = RequestHandler
)
print "Starting HTTP server ..."
print "URL: http://localhost:8080"
http_server.serve_forever()
http客户端:
#!/usr/bin/env python
# coding: utf-8
import pyjsonrpc
http_client = pyjsonrpc.HttpClient(
url = "/jsonrpc",
username = "Username",
password = "Password"
)
print http_client.call("add", 1, 2)
# Result: 3
# It is also possible to use the *method* name as *attribute* name.
print http_client.add(1, 2)
# Result: 3
# Notifications send messages to the server, without response.
http_client.notify("add", 3, 4)