当前位置: 首页 > 工具软件 > jsonrpc > 使用案例 >

python jsonrpc_jsonrpc使用

亢嘉茂
2023-12-01

jsonrpc使用

1.什么是rpc

RPC(Remote Procedure Call)远程过程调用,简单说就是通过网络请求服务,不需要了解底层网络技术的协议。

常用语分布式应用程序。

2.rpc数据传递格式

rpc支持多种数据格式传递,json,xml等

3.tornado中使用jsonrpc示例

安装服务端包,客户端包

pip install tornado jsonrpcserver

pip install tornado jsonrpcclient

服务端程序如下:

from tornado import ioloop, web

from jsonrpcserver.aio import methods

from jsonrpcserver.response import NotificationResponse

@methods.add

async def ping():

return "pong"

class RpcTestHandler(web.RequestHandler):

async def post(self):

request = self.request.body.decode()

response = await methods.dispatch(request)

if not response.is_notification:

self.write(response)

运行,开始监听

客户端程序如下:

# 同步请求

import jsonrpcclient

jsonrpcclient.request('http://localhost:20000/test_rpc', 'ping')

运行结果如下:

E:\gitcode\tornado-test>python test.py

--> {"jsonrpc": "2.0", "method": "ping", "id": 1}

# 异步请求

from tornado import ioloop

from jsonrpcclient.tornado_client import TornadoClient

client = TornadoClient('http://localhost:20000/test_rpc')

async def main():

result = await client.request('ping')

print(result)

ioloop.IOLoop.current().run_sync(main)

运行结果如下:

E:\gitcode\tornado-test>python test.py

INFO:jsonrpcclient.client.request:{"jsonrpc": "2.0", "method": "ping", "id": 1}

INFO:jsonrpcclient.client.response:{"jsonrpc": "2.0", "result": "pong", "id": 1}

pong

4.http请求,rpc请求区别

http协议是支持长连接的,因此和rpc的自定义tcp报文协议相比,连接上没有太大区别,

区别在于自定义tcp报文做了优化处理,去除了很多无用信息,这是因为rpc是面向服务的。

 类似资料: