2015-10-04 59 views
3

目前我看到可用於使用的WebSockets與燒瓶以下庫:最好的選擇

  1. flask-sockets(可能已過時)
  2. flask-SocketIO
  3. gevent-websockets(上述2依賴這個)

但是gevent-websockets還沒有兼容python3 (至少它不能通過點安裝)。這使得其他2無法使用。

是否有任何其他的替代方案與燒瓶使用websockets?或者龍捲風是最好的選擇?

+0

不幸的是,這是個問題,因爲你要求圖書館的建議。話雖如此,我認爲[autobahn](http://autobahn.ws/)是websockets更受歡迎的解決方案之一。還有[ws4py](https://ws4py.readthedocs.org/en/latest/)。 – poke

+0

@poke我清楚地提到**如何使用websockets和flask **,而flask是基於擴展的框架,一個取決於庫。此外,這個問題對其他(非瓶擴展名)是開放的,因爲它明確要求**庫**,所以有人可以建議其他方式 –

+0

我完全理解你在問什麼,是的,但是當你陳述自己時:*「它很清楚問[爲]圖書館「*和那種問題是[堆棧溢出](http://stackoverflow.com/help/on-topic)的主題。 – poke

回答

5

首先,請注意,Flask-SocketIO與另外兩個不同。它包裝了Socket.IO協議,而不是原始的WebSocket。這使得它可以支持類似WebSocket的接口,爲不支持WebSocket協議的客戶端使用HTTP長輪詢進行模擬。

說到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

    Eventlet是迄今爲止最高效而穩定的選擇,雙方的Py2和PY3。 WebSocket支持是eventlet的本地特性,因此只需在virtualenv中安裝eventlet即可使Flask-SocketIO以最佳配置工作。

  2. GEVENT和GEVENT-的WebSocket

    如果你喜歡GEVENT任何理由,這也適用,但在我的測試中,它不執行,eventlet一樣好。如果你想在使用gevent時訪問WebSocket,那麼你還需要安裝gevent-websocket軟件包。 gevent和gevent-websocket都已經被移植到Python 3中,但這已經太近了。

  3. WERKZEUG(或任何其他多線程WSGI兼容的服務器)

    您也可以使用瓶自己的Web服務器。在這種模式下,擴展只能在長輪詢模式下工作。與其他兩個相比,性能顯然非常糟糕,但是對於開發和調試而言,無需運行eventlet或gevent以及所帶來的所有複雜性,就能夠使所有工作都可以正常工作,這是非常好的。

截至今天(2015年10月4日),新的Flask-SocketIO擴展功能完全發佈。正式發佈即將推出。您可以安裝beta版有:

pip install flask-socketio==1.0b1 

的代碼可在1.0分支git的回購:https://github.com/miguelgrinberg/Flask-SocketIO/tree/v1.0。免責聲明:我確信現在已經很清楚了,但爲了以防萬一,請注意我是Flask-SocketIO,python-socketio和python-engineio的作者。