http/2服务器推送您的flask应用程序。

Flask-Firehose的Python项目详细描述


http/2服务器推送您的flask应用程序。

安装

pipinstallflask-firehose

用法

初始化

直接初始化:

app=Flask(__name__)Firehose(app)

使用应用程序工厂:

firehose=Firehose()defcreate_app():app=Flask(__name__)firehose.init_app(app)returnapp

推动资源

让html模板编写器决定推送什么:

{%extends'base.html'%}{%blockbody%}
    <link rel="stylesheet" href="{{push('/static/css/main.css',as='style',rel='preload')}}">
    This is some document.
{%endblock%}

让后端开发人员决定推送什么:

fromflask_firehoseimportpush@app.route('/someroute')defrender_someroute():push('/static/css/main.css',as='style',rel='preload')returnrender_template('some_template')

跟踪推送资源

理想情况下,会话期间已推送的资源不应再推送。因此,flask firehose包含一个简单的实用程序类,使用会话变量“h2 pushed”跟踪推送的资源。 此外,flask firehose还可以与外部代码一起工作,以便在提供的实现不合适的情况下跟踪推送的资源。

classCustom_connector():defget_pushed(self):"""Returns a set of items that have been already pushed to client.

        Returns
        -------
        set
            Set of items that are pushed.

        """# your code heredefset_pushed(self,inset):"""Update client state after pushing more items at the end of request.

        Parameters
        ----------
        inset : set
            A set of URLs of pushed items.
        """# your code here

使用带消防软管的自定义接头

firehose=Firehose(connector=Custom_connector())firehose.init_app(app)

配置nginx

location=/myapp{proxy_passhttp://upstream;http2_push_preloadon;}

更多信息请阅读:https://www.nginx.com/blog/nginx-1-13-9-http2-server-push/

测试

在./venv中初始化开发环境:

make devenv

运行单元测试:

make test

使用带Docker的nginx运行集成测试:

make dockertest

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java爬虫获取外部网站搜索结果   java Bluestack未连接到eclipse   java如何从ConstraintViolationException Hibernamte获取数据库字段名   HttpResponse HttpResponse=httpClient引发java运行时错误。执行(httpPost);   Jama中矩阵的java点积和叉积   java有什么方法可以唯一地识别可扩展设备吗?   java我需要用*来写我的名字,但我不断遇到一个错误,我对编码很陌生   java变量是在内部类中访问的。需要被宣布为最终决定。但我不想宣布最终结果   java如何缩短base64图像字符串,Android?   JavaSpringMVC:计划方法不自动触发   图形学习Java 2D API的好资源是什么?   如何在java中对方法进行排队   java JavaFX多行   java Selenium无法在[链接]上找到基于CSS元素的密码字段元素http://www.cartasi.it/gtwpages/index.jsp   Java中的equals()和hashCode()契约   软删除情况下的java Hibernate二级缓存   java为什么这段代码要两次调用这些方法?