基于decorator的工具包,使用jsonrpc就像烧瓶一样简单。支持异步。
py-json-rpc的Python项目详细描述
[![Circleci](https://circleci.com/gh/hachibeedi/py-json-rpc.svg?style=svg)(https://circleci.com/gh/hachibeedi/py-json-rpc)
!它可以提高批处理调用性能。
只是创建http处理程序的示例。你可以用其他的http处理溶液瓶,django…如果您愿意的话。
``python
import json
import requests
import torado.ioloop
import torado.web
从json-rpc.server.http import-create-hoge处理程序发出请求
y):
返回x+y
'方法':'aa',
'参数':{'aa':'rpc'},
'id':'111',
})
rpc2=rpc嫒dispatcher(发出请求('test/hyoe',{'x':20,'y':10}))
打印(json.dumps(rpc))
"id":"111"}
打印(json.dumps(rpc))
=>;u'{"jsonrpc":"2.0","result":"cccc called","id":"some_uid_for_you"}
创建_handler(tornado.web.requesthandler)),
]
app=make_app()
app.listen(8888)
tornado.ioloop.ioloop.current().start()
"
"发出rpc请求的示例
"
"打印(requests.post('http://localhost:8888/rpc',data=json.dumps(发出请求('aa',{'aa':'cccc'})).text)
"2.0","结果":6,"id":"cff9667f-a520-a520-a520-42cf-9216-ef2fa05a51a213"}
` ` `
` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `u rpc(x,y):
返回x+y
@app.register
异步定义减号(x,y):
返回x-y
@app.register
异步定义重请求(a):
打印(f'启动重请求…{a}秒')
等待异步睡眠(a)
打印(结束重请求…)
返回"主页!"
"
调用这些函数与非异步版本没有区别。
测试代码中有更多示例。文档正在编写中…
"
def test_plain():
""
函数将与正常调用时一样异步。
"
"result=asyncio.确保未来(加上rpc(1,2))
result=loop.运行直至完成(result)
assert result==3,结果
def test_positional_rpc_call():
rpc_result=app.dispatch({
'jsonrpc':'2.0',
'method':'plus_rpc',
'params':[1,2],
'id':111,
})
assert rpc_result.get('result')=3,rpc_result
```
函数"create_handler"将为tornado创建一个处理程序实例。
请使用aw实例没有实现任何安全功能。如果您希望rpc端点是公共的,那么您可能需要考虑自己创建一个处理程序(或者可以随意打开一个问题…或者当然是pr!).
rpc庘dispatcher
app=flask(庘name庘)
@register
def hoge(name):
return f'{name}called'
@app.route('/',methods=['post'])
def hello():
result=rpc嫒dispatcher(request.json)
返回json.dumps(result)
``````
```测试:
```python
>;>print(requests.post('http://localhost:5000',json=make嫒request('hoge',,['cccc'])。文本)
````
与django集成
视图可以很容易地与这个模块集成。
\批处理请求和正确的错误代码。
!它可以提高批处理调用性能。
只是创建http处理程序的示例。你可以用其他的http处理溶液瓶,django…如果您愿意的话。
``python
import json
import requests
import torado.ioloop
import torado.web
从json-rpc.server.http import-create-hoge处理程序发出请求
y):
返回x+y
'方法':'aa',
'参数':{'aa':'rpc'},
'id':'111',
})
rpc2=rpc嫒dispatcher(发出请求('test/hyoe',{'x':20,'y':10}))
打印(json.dumps(rpc))
"id":"111"}
打印(json.dumps(rpc))
=>;u'{"jsonrpc":"2.0","result":"cccc called","id":"some_uid_for_you"}
创建_handler(tornado.web.requesthandler)),
]
app=make_app()
app.listen(8888)
tornado.ioloop.ioloop.current().start()
"
"发出rpc请求的示例
"
"打印(requests.post('http://localhost:8888/rpc',data=json.dumps(发出请求('aa',{'aa':'cccc'})).text)
"2.0","结果":6,"id":"cff9667f-a520-a520-a520-42cf-9216-ef2fa05a51a213"}
` ` `
` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `u rpc(x,y):
返回x+y
@app.register
异步定义减号(x,y):
返回x-y
@app.register
异步定义重请求(a):
打印(f'启动重请求…{a}秒')
等待异步睡眠(a)
打印(结束重请求…)
返回"主页!"
"
调用这些函数与非异步版本没有区别。
测试代码中有更多示例。文档正在编写中…
"
def test_plain():
""
函数将与正常调用时一样异步。
"
"result=asyncio.确保未来(加上rpc(1,2))
result=loop.运行直至完成(result)
assert result==3,结果
def test_positional_rpc_call():
rpc_result=app.dispatch({
'jsonrpc':'2.0',
'method':'plus_rpc',
'params':[1,2],
'id':111,
})
assert rpc_result.get('result')=3,rpc_result
```
函数"create_handler"将为tornado创建一个处理程序实例。
请使用aw实例没有实现任何安全功能。如果您希望rpc端点是公共的,那么您可能需要考虑自己创建一个处理程序(或者可以随意打开一个问题…或者当然是pr!).
rpc庘dispatcher
app=flask(庘name庘)
@register
def hoge(name):
return f'{name}called'
@app.route('/',methods=['post'])
def hello():
result=rpc嫒dispatcher(request.json)
返回json.dumps(result)
``````
```测试:
```python
>;>print(requests.post('http://localhost:5000',json=make嫒request('hoge',,['cccc'])。文本)
````
与django集成
视图可以很容易地与这个模块集成。
\批处理请求和正确的错误代码。