2015-10-04 10 views
3

В настоящее время я увидеть следующую доступная для использования WebSockets с колбой библиотека:Лучшего варианта в настоящее время доступны для WebSockets с колбой на Python3

  1. flask-sockets (возможно, устаревшей)
  2. flask-SocketIO
  3. gevent-websockets (выше 2 зависит от это)

Однако GEvent-WebSockets еще не python3 совместимы (по крайней мере, он не устанавливается через pip). Это делает другие 2 непригодными для использования.

Есть ли другая альтернатива для использования веб-карт с флягой? Или это торнадо лучший выбор?

+0

Этот вопрос, к сожалению, не по теме, поскольку вы просите рекомендации библиотеки. При этом я думаю, что [autobahn] (http://autobahn.ws/) является одним из наиболее популярных решений для веб-узлов. Также есть [ws4py] (https://ws4py.readthedocs.org/en/latest/). – poke

+0

@poke я четко упомянул **, как использовать websockets с флягой **, а фляга - это основа, основанная на расширении, одна зависит от библиотек. Также вопрос открыт для других (не-колбу-расширений), поскольку он явно спрашивает ** библиотеки **, поэтому кто-то может предложить другие способы –

+0

Я точно понимаю, что вы просите, да, но, как вы сами заявляете: * «ясно запрашивает [для] библиотек "*, и такой вопрос [вне темы в переполнении стека] (http://stackoverflow.com/help/on-topic). – poke

ответ

5

Прежде всего, обратите внимание, что Flask-SocketIO отличается от двух других. Он обертывает протокол Socket.IO, а не raw 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 и имеет дизайн, который позволяет использовать различные механизмы для организации сетей и параллелизма. Зависимость gevent-socketio от версии 0.6 заменяется двумя новыми пакетами: python-socketio и python-engineio, которые реализуют текущую версию протокола Socket.IO и поддерживают все официальные клиенты Socket.IO (Javascript, Swift и C++).

Что касается зависимости низкого уровня, то есть в основном три варианта:

  1. Eventlet

    Eventlet на сегодняшний день является наиболее производительным и стабильный вариант, как на py2 и PY3. Поддержка WebSocket является родной для eventlet, поэтому просто установка eventlet в вашем virtualenv позволяет Flask-SocketIO работать в наиболее оптимальной конфигурации.

  2. GEvent и GEvent-WebSocket

    Если по какой-либо причине вы предпочитаете GEvent, что также работает, но в моих тестах он не выполняет так же хорошо, как eventlet. Если вы хотите иметь доступ к WebSocket при использовании gevent, вам также необходимо установить пакет gevent-websocket. И gevent, и gevent-websocket были перенесены на Python 3, но все это слишком недавно.

  3. Werkzeug (или любой другой совместимый сервер многопоточный WSGI)

    Вы также можете использовать собственный веб-сервер в КОЛБУ. В этом режиме расширение работает только в режиме длительного опроса.Производительность явно ужасна по сравнению с двумя другими, но для разработки и отладки приятно иметь возможность работать все без необходимости запускать eventlet или gevent со всеми сложностями, которые они приносят.

На сегодняшний день (10/4/2015) существует полностью функциональная бета-версия нового расширения Flask-SocketIO. Скоро появится официальный релиз. Вы можете установить бета-релиз:

pip install flask-socketio==1.0b1 

код доступен на 1.0 ветви мерзавца репо: https://github.com/miguelgrinberg/Flask-SocketIO/tree/v1.0.

Отказ от ответственности: Я уверен, что это ясно, но на всякий случай, обратите внимание, что я являюсь автором Flask-SocketIO, python-socketio и python-engineio.