tornad是Facebook开源的非阻塞式web框架,类似于nodejs,主要是为了解决frendfeed的实时更新。因此相应速度非常高。
安装
win10环境:1
pip install tornado
mongodb数据库:官网下载地址
数据库请求
Mysql
Tornado-MySQL
,是对PyMySQL的异步化的一个库,测试用例,文档,都比较齐全,目前在使用的版本。
异步web请求
使用异步装饰器,实现异步功能1
2
3
4
5
6
7
8
9
10
11class TestAsynchr2(tornado.web.RequestHandler):
@tornado.web.asynchronous
@tornado.gen.engine
def get(self, *args, **kwargs):
client = tornado.httpclient.AsyncHTTPClient();
response = yield tornado.gen.Task(client.fetch,test_url)
body = json.loads(response.body)
print '异步请求2 %s' % body
print body['errNum']
self.write('异步请求2 %s' % response.body)
self.finish()
重点是yield,以及self.finish()
使用asyncmongo
,来异步的调用mongoDB服务器。它是专门给Tornado开发者开发提供异步数据库访问的
使用tornado进行长轮询
传统的方案是浏览器js进行定时http轮训,但是对服务器压力太大了。
新的技术是让浏览器发起连接来模拟服务器推送更新。这种方式的HTTP连接被称为长轮询或Comet请求。意味着浏览器只需启动一个http请求,其连接的服务器会有意保持开启,浏览器只需要等待更新可用时服务器”推送”响应。当服务器发送响应并关闭连接后,(或者浏览器端客户请求超时),客户端只需打开一个新的连接并等待下一个更新。
好处:
- 减少web服务器负载
- 浏览器兼容性,只要支持ajax即可
- 比如状态更新,消息通知,聊天消息,Twitter显示通知,Facebook的聊天
- 跟websockets的实现方式不同
常见问题
修改mysql默认字符集
最简单的方法:修改mysql的my.ini
配置文件.1
2default-character-set = utf8
character_set_server = utf8
python2.7查询mysql的中文乱码
解决方法:1
2
3
4
5
6
7
8
9
10reload(sys)
sys.setdefaultencoding('utf-8')
conn = yield tornado_mysql
.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='test',charset='utf8')
然后
print value.decode('utf-8')
如果是插入
则是value = unicode('你好',’utf-8')