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


tornado中jsonrpc的使用
import json import tornado.httpserver
import tornado.ioloop
import tornado.web
from jsonrpcserver.aio import methods #第一个方法
@methods.add
async def ping(context, **kwargs):
return kwargs #第二个方法
@methods.add
async def ping_one(context, **kwargs):
return kwargs class 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 time
from jsonrpcclient import HTTPClient
req = 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
tornado+jsonrpc的更多相关文章
- jsonrpc使用
jsonrpc使用 1.什么是rpc RPC(Remote Procedure Call)远程过程调用,简单说就是通过网络请求服务,不需要了解底层网络技术的协议. 常用语分布式应用程序. 2.rpc数 ...
- Python(九)Tornado web 框架
一.简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过 ...
- 使用tornado,我们可以做什么?
以下介绍都是建立在python2.x的基础上面,tornado使用任意版本皆可. 如果我们需要对外提供一个http server(web api)/websocket server时,我们都可以使用t ...
- tornado session
[转]tornado入门 - session cookie 和session 的区别: 1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以 ...
- tornado template
若果使用Tornado进行web开发可能会用到模板功能,页面继承,嵌套... 多页应用模板的处理多半依赖后端(SPA就可以动态加载局部视图),就算是RESTfull的API设计,也不妨碍同时提供部分模 ...
- tornado上手
http://www.tornadoweb.org/en/stable/ http://www.cnblogs.com/fanweibin/p/5418697.html import tornado. ...
- tornado+sqlalchemy+celery,数据库连接消耗在哪里
随着公司业务的发展,网站的日活数也逐渐增多,以前只需要考虑将所需要的功能实现就行了,当日活越来越大的时候,就需要考虑对服务器的资源使用消耗情况有一个清楚的认知. 最近老是发现数据库的连接数如果 ...
- centos 6.7 搭建tornado + nginx + supervisor的方法(已经实践)
首先,本来不想写这篇博客了,但是我测试了很多网上的例子包括简书的,全不行,我总结原因是自己太笨,搞了俩个晚上,后来决定,自己还是写一篇记录下来,保证自己以后使用 环境: centos6.7 64 py ...
- tornado中将cookie值设置为json字符串
不熟悉,找了很久,能FQ的话, https://groups.google.com/forum/#!topic/python-tornado/9Y--NgwjP_w 2楼有解释. tornado.es ...
随机推荐
- git配置代理
1.查看当前代理 git config --global http.proxy 2.配置git走代理,可走http代理也可以走socks5代理,可根据自己的代理协议而定 #http代理 git con ...
- flask中注册验证码和分页
注册验证码.核心思路,替换注册页面的img标签的src属性. 1.准备好文件夹:captcha2.导包 from utils.captcha.captcha import captcha3.验证码生成 ...
- 自动化测试_Mac安装python+selenium
1.下载安装(参照下文) https://blog.csdn.net/kacylining/article/details/60587484 https://www.zhihu.com/questio ...
- 取MySQL结果集的第一条记录
select * FROM SU_supplycontract t WHERE supplyContractCode="CRM20180813002" limit 1;
- centos7 yum安装nginx
1.添加源,centos7默认可能没有nginx源 sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release ...
- cordova文件系统插件的使用方法:cordova-plugin-file
提供对设备上的文件进行读取和写入的功能支持. 1. 添加插件:cordova plugin add cordova-plugin-file 2. 调用方法:
- numpy用法
NumPy中创建特殊值 np.nan np.inf nan表示数据空缺 inf表示无穷 参考:https://www.cnblogs.com/haoxi/p/9175781.html
- lay-verify 无效
lay-verify 无效 使用lay-verify有两个需要注意的地方: form标签需要添加 class="layui-form" 提交按钮需要添加 lay-submit=&q ...
- Kettle解决方案: 第一章ETL入门
第一章ETL入门 1.1 OLPT和数据仓库对比 普通的事务系统和商业智能系统(BI)有什么区别? 1个独立的普通事务系统也被称为在线事务处理系统(OLTP) 商业智能系统也常被称为决策支持系统(DS ...
- 前端SEO与爬虫与SSR(Server Side Render)
讲真,之前没考虑过这个问题.因为项目原因,自己用python的一些工具,爬取了淘宝.京东.百度等的一些图片和图片名称之类的信息.以为爬虫只是解析html文本,然后提取关键字,保存自己想要的信息即可,或 ...