目前可用于python3上带有烧瓶的websockets的最佳选择

时间:2015-10-04 16:46:09

标签: python-3.x flask websocket gevent

目前我看到以下库可用于使用带有烧瓶的websockets:

  1. flask-sockets(可能已过时)
  2. flask-SocketIO
  3. gevent-websockets(2以上取决于此)
  4.   

    然而,gevent-websockets尚未兼容python3(至少它不能通过pip安装)。这使得其他2也无法使用。

    使用带有烧瓶的腹板有其他替代方法吗?或龙卷风是最佳选择?

1 个答案:

答案 0 :(得分:8)

首先,请注意Flask-SocketIO与其他两个不同。它包装了Socket.IO协议,而不是原始的WebSocket。这使它能够支持使用HTTP长轮询模拟的类似WebSocket的接口,用于不支持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-socketiopython-engineio的新包,它们实现了当前版本的Socket.IO协议,并支持所有官方Socket.IO客户端(Javascript ,Swift和C ++)。

就低级依赖性而言,基本上有三种选择:

  1. Eventlet

    在Py2和Py3上,Eventlet是迄今为止性能最高且最稳定的选项。 WebSocket支持是eventlet的原生支持,因此只需在virtualenv中安装eventlet,即可使Flask-SocketIO以最佳配置工作。

  2. gevent和gevent-websocket

    如果出于任何原因你更喜欢gevent,那也可以,但在我的测试中,它的效果不如eventlet。如果你想在使用gevent时访问WebSocket,那么你还需要安装包gevent-websocket。 gevent和gevent-websocket都已移植到Python 3,但它太新了。

  3. Werkzeug(或任何其他多线程WSGI兼容服务器)

    您还可以使用Flask自己的网络服务器。在此模式下,扩展仅适用于长轮询模式。与其他两个相比,性能显然很糟糕,但是对于开发和调试来说,能够让所有工作都运行而不必运行eventlet或gevent,并带来所有复杂性,这是很好的。

  4. 截至今天(2015年10月4日),新的Flask-SocketIO扩展版有一个功能齐全的测试版。官方发布即将推出。您可以使用以下命令安装测试版:

    pip install flask-socketio==1.0b1
    

    代码在git repo的1.0分支上可用:https://github.com/miguelgrinberg/Flask-SocketIO/tree/v1.0

    免责声明:我相信现在已经很清楚,但为了以防万一,请注意我是Flask-SocketIO,python-socketio和python-engineio的作者。