Tornado——异步操作(前端ajax和后端同步/异步操作)
2017-12-28 12:33
393 查看
异步编程:异步编程处理方式,主要用于数据业务的底层非同步操作,有两种操作手段,Ajax和后端服务器的异步模块。
1.Ajax
Ajax的异步操作:通过前端直接发送Ajax请求到目标服务器(以获取天气信息为例,发送请求到气象局),获取数据并更新前端页面,此操作不需要经过后端。获取到数据后通过DOM操作渲染页面。<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ajax请求获取天气预报信息</title> <script src="static/jquery/jquery-2.2.4.js"></script> </head> <body> <form> <input type="text" name="city" id="city"><br/> <div id="info"></div> </form> <script> //失焦事件 $('#city').blur(function(){ $.ajax({ 'url':'http://wthrcdn.etouch.cn/weather_mini', type:'get', data:{city:$('#city').val()}, success:function(data){ var $_weather=JSON.parse(data); console.log($_weather); //城市 $today1=$_weather.data.city; $1 = $('<p>').text('城市:'+$today1); $hr=$('<hr>') //今日日期 $today2=$_weather.data.forecast[0].date; $2 = $('<p>').text('日期:'+$today2); //今日最高温度; $today3=$_weather.data.forecast[0].high; $3 = $('<p>').text('最高温度:'+$today3); //今日最低温度 $today4=$_weather.data.forecast[0].low; $4 = $('<p>').text('最低温度:'+$today4); //今日风向 $today5=$_weather.data.forecast[0].fengxiang; $5 = $('<p>').text('风向:'+$today5); //今日风力 $today6=$_weather.data.forecast[0].fengli; $6 = $('<p>').text('风力:'+$today6); $('#info').append($1).append($hr).append($2).append($3).append($4).append($5).append($6) }, }) }) </script> </body> </html>
2.python后端程序中的数据交互方式,又分为两种(后端同步操作和后端异步操作)。
后端同步操作:即同步交互,核心处理类是用了tornado内置的客户端对象tornado.httpclient.HTTPClient后端异步操作:即异步交互,核心处理类是用了tornado内置的客户端对象的异步操作对象tornado.httpclient.AsyncHTTPClient后端同步操作和后端异步操作的特点:同步操作表示每次只能向目标服务器发送一个请求,待其返回数据后才能进行下一次请求,若请求较多的情况下易发生阻塞。异步操作可同时发送多个请求到目标服务器,较早返回数据的将会被优先处理。①后端同步操作py文件'''后端同步操作,服务器通过内置的客户端对象,抓取目标url地址的数据,返回给前端页面,通过dom操作渲染页面'''# 引入需要的模块from tornado.web import Application, RequestHandlerfrom tornado.ioloop import IOLoopfrom tornado.httpserver import HTTPServerfrom tornado.httpclient import HTTPClient# 定义首页视图类class IndexHandler(RequestHandler):def get(self):self.render('index.html')# 定义获取天气的视图类class WeatherHandler(RequestHandler):def get(self):# 获取内置的客户端对象client = HTTPClient()# 获取要查询的城市city = self.get_argument('city')# 抓取气象局天气预报数据,得到响应对象response = client.fetch('http://wthrcdn.etouch.cn/weather_mini?city=' + city)# 数据被封装在响应对象的body属性中# 将数据写入到页面中self.write(response.body)# 定义程序运行的入口if __name__ == '__main__':import osBASE_DIR = os.path.dirname(__file__)app = Application([(r'/', IndexHandler),(r'/weather', WeatherHandler)],template_path=os.path.join(BASE_DIR, 'templates'),static_path=os.path.join(BASE_DIR, 'static'),debug=True)server = HTTPServer(app)server.listen(8000)IOLoop.current().start()index.html文件
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>后端同步/异步获取数据</title><script src="/static/jquery/jquery-2.2.4.js"></script></head><body><form>当前城市:<input type="text" name="city" id="city"><div id="info"></div></form><script>$('#city').blur(function(){//获取到输入的城市$city=$('#city').val()//发送ajax请求到后端$.ajax({url:'/weather',type:'get',data:{'city':$city},success:function(data){$data=JSON.parse(data)console.log($data)//当前城市名称$cty=$('<p>').text('当前城市:'+$data.data.city)$hr=$('<hr>')//今天的日期$date=$('<p>').text('当前日期:'+$data.data.forecast[0].date)//最高气温$high=$('<p>').text('最高气温:'+$data.data.forecast[0].high)//最低气温$low=$('<p>').text('最低气温:'+$data.data.forecast[0].low)//风向$fx=$('<p>').text('风向:'+$data.data.forecast[0].fengixang)//风力$fl=$('<p>').text('风力:'+$data.data.forecast[0].fengli)//将天气信息写入到页面中//empty()表示每次写入前先清空以前的数据$('#info').empty().append($cty).append($hr).append($date).append($high).append($low).append($fx).append($fl)}})})</script></body></html>②后端异步操作,index.html文件与上面相同,下面是py文件
'''后端异步操作通过异步操作对象,手动控制数据返回,实现异步获取数据'''# 引入需要的模块,asynchronous是一个装饰器,用来告知函数不要自动返回数据from tornado.web import Application, RequestHandler, asynchronousfrom tornado.ioloop import IOLoopfrom tornado.httpserver import HTTPServer# 引入异步操作对象from tornado.httpclient import AsyncHTTPClient# 定义首页视图处理类class IndexHandler(RequestHandler):def get(self):self.render('index.html')# 定义后端异步获取天气信息的视图处理类class WeatherHandler(RequestHandler):@asynchronousdef get(self):# 获取前端输入的城市信息city = self.get_argument('city')# 获取异步操作对象client = AsyncHTTPClient()# 获取天气信息client.fetch('http://wthrcdn.etouch.cn/weather_mini?city=' + city, callback=self.deal_resonse)def deal_resonse(self, response):content = response.body# 将数据返回到页面中self.write(content)# 手动控制数据返回,finish表示可以返回数据了self.finish()# 定义程序运行入口if __name__=='__main__':import osBASE_DIR=os.path.dirname(__file__)app = Application([(r'/',IndexHandler),(r'/weather',WeatherHandler)],template_path=os.path.join(BASE_DIR,'templates'),static_path=os.path.join(BASE_DIR,'static'),debug=True)server = HTTPServer(app)server.listen(8000)IOLoop.current().start()
3.linux/unix系统中的压力测试软件siege
相关文章推荐
- ASP.NET WebForm 之 Ajax 请求后端处理 概述 ASP.NET 在MVC中的用途非常广泛,操作起来也非常简单。前台请求异步请求 Controlle
- ajax请求的同步和异步操作
- 关于ajax异步操作和同步操作参数设置
- input屏蔽历史记录 ;function($,undefined) 前面的分号是什么用处 JSON 和 JSONP 两兄弟 document.body.scrollTop与document.documentElement.scrollTop兼容 URL中的# 网站性能优化 前端必知的ajax 简单理解同步与异步 那些年,我们被耍过的bug——has
- 前端通过AJAX提交数据,后台PHP处理数据实现异步操作基本流程
- 通过ajax异步向后端发送请求,响应请求向前端传送json格式数据的实现思路
- ajax 操作/同步、异步区别
- 深刻理解ajax中同步和异步的区别和使用场景
- AJAX中的请求方式以及同步异步的区别
- ajax异步通讯 遮罩滚动栏,防止并发及误操作
- Ajax的同步与异步详解
- jquery的ajax同步和异步
- NSNotificationCenter通知中心是同步操作还是异步操作
- Ajax的同步异步(async属性)
- ajax同步与异步
- ajax async属性(同步异步)
- jQuery的ajax,当async为false时,同步操作失败。解决方式
- Ajax中什么时候用同步,什么时候用异步?
- AJAX是什么? AJAX的交互模型(流程)?同步和异步的区别? AJAX跨域的解决办法?
- jquery的ajax同步和异步的理解及示例