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