目前我看到以下库可用于将 websockets 与 Flask 一起使用:
-
烧瓶插座 https://github.com/kennethreitz/flask-sockets(可能已过时)
- Flask-SocketIO https://github.com/miguelgrinberg/Flask-SocketIO
-
gevent-websockets https://bitbucket.org/Jeffrey/gevent-websocket/(以上2个取决于此)
然而 gevent-websockets 尚不兼容 python3(至少它不能通过 pip 安装)。这使得其他 2 个也无法使用。
将 websocket 与 Flask 一起使用还有其他选择吗?或者龙卷风是最好的选择?
首先,请注意 Flask-SocketIO 与其他两个不同。它包装了 Socket.IO 协议,而不是原始的 WebSocket。这使得它能够为不支持 WebSocket 协议的客户端支持通过 HTTP 长轮询模拟的类似 WebSocket 的接口。
说到 Flask-SocketIO,请注意该扩展即将进行重大修改。
当前的官方版本(0.6)依赖于 gevent、gevent-socketio 和 gevent-websocket。不幸的是,gevent-socketio 作为一个项目早已消亡,并且停留在 Socket.IO 协议的非常旧版本上,这迫使您使用古老的 Javascript 客户端。
即将推出的 Flask-SocketIO 版本 1.0 是完全重写的,主要与 0.6 版本兼容,但它支持 Python 2 和 Python 3,并采用允许使用不同机制进行网络和并发的设计。 0.6 版本中的 gevent-socketio 依赖项被两个名为python-socketio https://github.com/miguelgrinberg/python-socketio and python-engineio https://github.com/miguelgrinberg/python-engineio,它实现了当前版本的 Socket.IO 协议,并支持所有官方 Socket.IO 客户端(Javascript、Swift 和 C++)。
就低级依赖关系而言,您基本上有三个选择:
-
Eventlet
在 Py2 和 Py3 上,Eventlet 是迄今为止性能最高、最稳定的选项。 WebSocket 支持是 eventlet 的原生支持,因此只需在 virtualenv 中安装 eventlet 即可使 Flask-SocketIO 以最佳配置工作。
-
gevent 和 gevent-websocket
如果出于某种原因您更喜欢 gevent,那也可以,但在我的测试中它的性能不如 eventlet。如果你想在使用 gevent 时访问 WebSocket,那么你还需要安装 gevent-websocket 包。 gevent 和 gevent-websocket 都已移植到 Python 3,但一切都太新了。
-
Werkzeug(或任何其他多线程 WSGI 兼容服务器)
您还可以使用 Flask 自己的 Web 服务器。在此模式下,扩展仅在长轮询模式下工作。与其他两者相比,性能显然很糟糕,但对于开发和调试来说,能够让一切正常工作而无需运行 eventlet 或 gevent 是件好事,因为它们带来了所有复杂性。
截至今天(2015 年 10 月 4 日),新的 Flask-SocketIO 扩展已发布功能齐全的测试版。正式版本即将发布。您可以使用以下命令安装测试版:
pip install flask-socketio==1.0b1
该代码可在 git 存储库的 1.0 分支上找到:https://github.com/miguelgrinberg/Flask-SocketIO/tree/v1.0 https://github.com/miguelgrinberg/Flask-SocketIO/tree/v1.0.
免责声明:我确信现在已经很清楚了,但为了以防万一,请注意我是 Flask-SocketIO、python-socketio 和 python-engineio 的作者。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)