博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tornado+jsonrpc
阅读量:5960 次
发布时间:2019-06-19

本文共 2192 字,大约阅读时间需要 7 分钟。

rpc:远程过程调用(A服务调用B服务的一个方法或函数)

 

tornado中jsonrpc的使用

import jsonimport tornado.httpserverimport tornado.ioloopimport tornado.webfrom jsonrpcserver.aio import methods#第一个方法@methods.addasync def ping(context, **kwargs):    return kwargs#第二个方法@methods.addasync def ping_one(context, **kwargs):    return kwargsclass RpcHandler(tornado.web.RequestHandler):    def get(self):        response = methods.dispatch({
"jsonrpc": "2.0", "method": "ping", "id": 33, 'params': {
'where': 23}}, context={
'name': '张三'}) if not response.is_notification: self.write(response) #通过此接口调用不同的方法 async def post(self): rpc_request = self.request.body.decode() response = await methods.dispatch(rpc_request, context={
'key': 'one'}) if not response.is_notification: self.write(json.dumps(response))def make_app(): settings = {
'debug': True} return tornado.web.Application([ (r'/', RpcHandler), ], **settings)if __name__ == '__main__': app = make_app() http_server = tornado.httpserver.HTTPServer(app) ip = '127.0.0.1' port = 8000 http_server.bind(8000, ip) http_server.start(1) print('server start! http://{}:{}'.format(ip, port)) tornado.ioloop.IOLoop.current().start()

 

 

客户端调用代码如下:

import timefrom jsonrpcclient import HTTPClientreq = HTTPClient('http://127.0.0.1:8000/')# 请求ping方法res = req.request('ping', name=34)print(res)time.sleep(1)# 请求ping_one方法res = req.request('ping_one', name=35)print(res)time.sleep(1)# 批量请求两个方法res = req.send('''[{"jsonrpc": "2.0", "method": "ping_one", "params": {"name": 351}, "id": 21},                   {"jsonrpc": "2.0", "method": "ping_one", "params": {"name": 352}, "id": 22}                   ]''')print(res)

 

 服务端响应如下:

 

客户端响应如下:

 

 

json-rpc是一种非常轻量级的跨语言远程调用协议,实现及使用简单。方便语言扩展客户端的实现。

使用场景:

调用另一个服务的某个方法,相对于接口调用,在代码整洁及解耦方面有优势。并且可以使用批量请求(在所有请求完成后,在一并返回)

并且如果是 频繁请求另一个服务的某种功能,使用rpc比http较为轻量级,并且结合socket使用,达到一个连接中多个请求,减少系统开销

 

相关网址:https://www.zybuluo.com/phper/note/76641

                  https://blog.csdn.net/red_heel/article/details/78911252

                  https://www.cnblogs.com/chunguang/p/5724782.html

转载于:https://www.cnblogs.com/rgcLOVEyaya/p/RGC_LOVE_YAYA_692days_820.html

你可能感兴趣的文章
安装WMware 在Windows平台下学习Linux
查看>>
NodeJS对于Java开发者而言是什么?
查看>>
2016 软件开发的七大趋势:容器技术将统治世界
查看>>
IDC:2020年企业将在网络安全上花费1016亿美元
查看>>
【独家】新智元×出门问问六问六答:获大众 1.8 亿美元后准备做什么
查看>>
苹果在国贸改造了一套房 智能家居圈都慌了!
查看>>
一年400元,监控APP让你知道对方的所有隐私
查看>>
《VMware Virtual SAN权威指南(原书第2版)》一1.2 软件定义的存储
查看>>
《UNIXLinux程序设计教程》一3.3 设置描述字的文件位置
查看>>
云服务器 ECS 建站教程:部署RabbitMQ
查看>>
微软承诺2018年前数据中心将使用50%可再生能源
查看>>
互联网+新生活:智慧城市建设的亳州样本
查看>>
这是一个国内只有寥寥数人懂得的云计算技术
查看>>
告别“看家护院” 银行安防需树立“大安全”观
查看>>
物联网崛起,新技术如雨后春笋般
查看>>
用户为中心:华为消费者云服务背后揭示了啥?
查看>>
太阳能2017年首季业绩“预喜”
查看>>
火爆:Snapchat成App Store搜索量/频率最高应用
查看>>
People Power 公司入选中国移动数字家庭联盟,共同推进智能家居战略
查看>>
CYQ.Data 轻量数据层之路 V4.5 版本发布[更好的使用体验,更优的缓存机制]
查看>>