json-rpc简介
JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议,其请求和返回的格式都是json格式。最近看了好多开源的项目,提供的服务都是json格式,其请求格式如下:
{ "method": "方法名", "params": [“参数数组”], "id": 方法ID}
- method 就是暴露的rpc的方法
- params 就是方法请求的参数
- id 方法请求的id
搭建一个python的rpc服务
- 安装需要的python包,这里测试我们用的版本是python3.6
pip install json-rpc
- 开发json rpc的python service 端
# coding: utf-8
from werkzeug.wrappers import Request, Response
from werkzeug.serving import run_simple
from jsonrpc import JSONRPCResponseManager, dispatcher
@dispatcher.add_method
def hello():
'''
测试的一个rpc方法
:return:
'''
return "this is python test"
@Request.application
def application(request):
'''
服务的主方法,handle里面的dispatcher就是代理的rpc方法,可以写多个dispatcher
:param request:
:return:
'''
response = JSONRPCResponseManager.handle(
request.get_data(cache=False, as_text=True), dispatcher)
return Response(response.json, mimetype='application/json')
if __name__ == '__main__':
run_simple('localhost', 9090, application)
- 开发json rpc的python client 端
# coding: utf-8
import requests
import json
def main():
url = "http://localhost:9090/jsonrpc"
headers = {'content-type': 'application/json'}
payload = {
"method": "hello",
"params": [],
"jsonrpc": "1.0",
"id": 0,
}
response = requests.post(
url, data=json.dumps(payload), headers=headers).json()
print("response:",json.dumps(response))
if __name__ == "__main__":
main()
- 测试结果
首先启动service端,然后执行client 端,我们可以得到返回结果:
也可以在终端直接执行命令请求:response: {"result": "this is python test", "id": 0, "jsonrpc": "2.0"}
curl localhost:9090/jsonrpc --data '{"jsonrpc":"1.0", "method":"hello", "params":[], "id":1}'
其他
这里只是简单的启动搭建的一个python jsonrpc服务,关于python jsonrpc的包有多种,每个的使用方法都不太一样,具体的也要根据业务实际情况去处理,我们只是简单模拟了整个请求过程,对于想用python 提供rpc服务的可以试试