一、简介:
Flask-SocketIO使Flask
应用程序可以实现客户端和服务器之间的低延迟双向通信。客户端应用程序可以使用 Javascript
、Python
、C++
、Java
和Swift
中的任何SocketIO客户端库或任何其他兼容客户端来建立与服务器的永久连接。
二、安装:
通过pip
即可安装:
$ pip install flask-socketio
三、运行Flask-SocketIO要求:
Flask-SocketIO
必须要Python 3.6+
的版本,可以从下面三个选项中选择:
eventlet
是性能最好的选择,支持长轮询和WebSocket
传输。- 也可以使用
gevent
。gevent
包完全支持长轮询传输,但与eventlet
不同的是,gevent
没有原生WebSocket
支持。要添加对WebSocket
的支持,目前有两个选项。安装gevent-websocket
包为gevent
添加了WebSocket
支持,或者可以使用带有WebSocket
功能的uWSGI Web
服务器。使用gevent
也是一个性能比较高的选择,但比eventlet
略低。 - 也可以使用基于
Werkzeug
的Flask
开发服务器,但需要注意的是,该Web
服务器仅用于开发用途,因此它应该仅用于简化开发工作流程,而不用于生产。
Flask-SocketIO
会根据安装的包自动检测要使用的异步框架。优先使用 eventlet
,其次是 gevent
。对于 gevent
中的 WebSocket
支持,首选 uWSGI
,其次是 gevent-websocket
。如果 eventlet
和 gevent
均未安装,则使用 Flask
开发服务器。
如果使用多个进程,则必须配置消息队列服务以允许服务器协调广播等操作。支持的队列是Redis
、RabbitMQ
、 Kafka
以及Kombu
包支持的任何其他消息队列。
在客户端,可以使用官方的 Socket.IO Javascript
客户端库来建立与服务器的连接。还有用 Swift
、Java
和 C++
编写的官方客户端。非官方客户端也可以工作,只要它们实现了 Socket.IO
协议就可以。Python-SocketIO 包实现了SocketIO
协议的Python
客户端。(注:Python-SocketIO
也是Flask-SocketIO
作者写的)。
四、版本支持:
Socket.IO
协议经过多次修订,其中一些引入了向后不兼容的更改,这意味着客户端和服务器必须使用兼容版本才能正常工作。
下面的版本兼容性图表将此包的版本映射到JavaScript
参考实现的版本以及 Socket.IO
和 Engine.IO
协议的版本。
JavaScript Socket.IO版本 | Socket.IO 协议修订 | Engine.IO 协议修订 | Flask-SocketIO 版本 | python-socketio 版本 | python-engineio 版本 |
---|---|---|---|---|---|
0.9.x | 1、2 | 1、2 | 不支持 | 不支持 | 不支持 |
1.x 和 2.x | 3、4 | 3 | 4.x | 4.x | 3.x |
3.x 和 4.x | 5 | 4 | 5.x | 5.x | 4.x |