Flask-SocketIO为Flask应用程序提供对客户端和服务器之间的低延迟双向通信的访问。客户端应用程序可以使用Javascript,C++,Java和Swift中任何SocketIO官方客户端和任何兼容客户端来建立与服务器的永久连接。
安装
pip install flask-socketio
依赖
Flask-SocketIO兼容Python2.7和Python3.3+,该软件的异步服务可以从以下三种选择中选择:
- eventlet:高性能选项,支持长轮询和WebSocket传输
- gevent:支持多种不同的配置。long-polling传输完全由gevent包支持,但与eventlet不同,gevent没有原生的WebSocket支持。为了增加对WebSocket的支持,目前有两种选择:安装
gevent-websocket
软件包会将WebSocket支持添加到gevent中,或者可以使用随WebSocket功能一起提供的uWSGI Web容器。gevent也是一项高性能选项,但略低于eventlet。 - 基于Werkzeug的Flask开发服务器也可以使用,但需要注意的是它缺少其他两个选项的性能,所以它只能用于简化开发流程。该选项仅支持长轮询传输
该扩展根据安装的内容自动检测使用哪个异步框架,优先考虑eventlet,然后是gevent。对于gevent中的WebSocket支持,首选uWSGI,然后是gevent-websocket
。如果既没有安装eventlet,也没有安装gevent,则使用Flask开发服务器。
如果使用多个进程,则进程使用消息队列服务来协调诸如广播等操作。受支持的队列包括:Redis、RabbitMQ和Kombu软件包支持的任何其他消息队列。
初始化
举个简单的栗子:
from flask import Flask
from flask_socketio import SocketIO
app = Flask(__name__)
app.config["SECRET_KEY"] = "secret!"
socketio = SocketIO(app)
if __name__ == "__main__":
socketio.run(app, host="0.0.0.0", port=5000)
init_app()初始化的样式也被支持。请注意Web服务器的启动方式,该socketIO.run()
功能封装了Web服务器的启动并取代了app.run()
标准的Flask开发服务器的启动。当我们的服务器程序启动了,相应的客户端程序必须提供一个页面加载SocketIO
库:
<script type="text/javascript" src="ht