首页 > 其他 > 详细

Tornado和浏览器的异步并发测试

时间:2015-11-14 01:07:21      阅读:517      评论:0      收藏:0      [点我收藏+]

Python3.5发布,Tornado也随后更新,支持最新的async/await语法,正好试验一下异步特性,写了一个简单的例程。

server.py

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-


import logging
import os
import sys

import tornado
import tornado.gen
import tornado.ioloop
import tornado.web


class SleepHandler(tornado.web.RequestHandler):
    async def get(self, *args, **kwargs):
        await tornado.gen.sleep(3)
        self.write(‘test‘)


if __name__ == ‘__main__‘:
    logging.basicConfig(
        format=‘%(levelname)s %(module)s.%(funcName)s[%(lineno)d] %(message)s‘,
        level=logging.DEBUG)

    # 设置程序工作目录
    os.chdir(os.path.dirname(os.path.realpath(sys.argv[0])))

    # URL映射
    handlers = [
        # 静态文件和模板
        (‘/‘, tornado.web.RedirectHandler, {‘url‘: ‘/web/index.html‘}),
        (‘/web/(.*)‘, tornado.web.StaticFileHandler, {‘path‘: ‘web‘}),

        # REST
        (‘/rest/sleep‘, SleepHandler),
    ]

    settings = {
        ‘debug‘: True
    }

    application = tornado.web.Application(handlers, **settings)
    application.listen(8080)
    tornado.ioloop.IOLoop.instance().start()



web/index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <script src="jquery.js"></script>
    <script>
        $(function () {
            for (var i = 0; i < 100; i++) {
                $.ajax(‘/rest/sleep‘);
            }
        });
    </script>
</head>
<body>
</body>
</html>



使用Firefox和Chrome浏览网页,启用开发者工具查看请求响应情况,结果很有趣。

Firefox无论第一次打开还是刷新都是这样子的:

技术分享

而Chrome刷新后是这样子的:

技术分享

可以看到,无论是Firefox还是Chrome,最多貌似只能有6个并发连接,为了验证问题是否出在服务器,我甚至使用了Wireshark看数据包时间,结果确认是在浏览器。

Chrome刷新页面之后会出现很多304,而且这些调用没有并发执行,查资料得知某些浏览器会在连续请求同一个URL的情况下挂起后续请求,至于为什么有些是304有些是200,查看调用细节,304的请求中包含了“If-None-Match”,而200请求中却没有,至于浏览器为什么这样做就不知道了。

解决办法是每一次请求的URL后面加上一个变化的参数,让浏览器误以为是不同的请求,也就是在index.html的for循环内语句改成

$.ajax(‘/rest/sleep?‘ + i);



这样,Chrome就正常了:

技术分享

那么能不能提高浏览器的并发连接数呢?再次查资料得知,Chrome是硬编码在程序中的,无法修改,而Firefox可以修改“network.http.max-persistent-connections-per-server”配置项,比如我改成100,再次刷新页面,终于看到了100个并发连接:

技术分享

Tornado和浏览器的异步并发测试

原文:http://my.oschina.net/mallon/blog/530201

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!