Подтвердить что ты не робот

Веб-узлы в колбе

В настоящее время я изучаю поддержку websocket в Python и немного запутался в предложениях.

С одной стороны, можно использовать Flask + gevent. С другой стороны, uwsgi имеет поддержку сокетов и, наконец, есть расширение, которое связывает uwsgi и gevent.

В чем проблема с внедрением websockets только с одним из них? Что я могу выиграть, смешав их?

Изменение вопроса

Что добавляет gevent, что threaded uwsgi не будет?

4b9b3361

Ответ 1

В обычных HTTP-запросах соединения между клиентом и сервером недолговечны, клиент подключается к серверу, отправляет запрос, получает ответ и затем закрывает соединение. В этой модели сервер может обслуживать большое количество клиентов, используя небольшое количество рабочих. Модель concurrency в этой ситуации обычно основана на потоках, процессах или их комбинации.

Когда вы используете websocket, проблема сложнее, потому что соединение с websocket открыто в течение длительного периода времени, поэтому сервер не может использовать небольшой пул работников для обслуживания большого количества клиентов, каждый клиент должен получить его собственный специалист. Если вы используете потоки и/или процессы, ваше приложение не будет масштабироваться для поддержки большого количества клиентов, потому что у вас не может быть большого количества потоков/процессов.

Здесь gentent входит в изображение. Gevent имеет модель concurrency, основанную на озерах, которые намного лучше, чем потоки/процессы. Таким образом, сервисные соединения с сервером на основе gevent позволяют поддерживать большее количество клиентов из-за небольшого характера зеленых. С помощью uWSGI у вас есть выбор моделей concurrency для использования с веб-сокетами, и в том числе модель на основе greenlet от gevent. Вы также можете использовать автономный веб-сервер gevent, если хотите.

Но обратите внимание, что gevent ничего не знает о веб-сокетах, это просто сервер. Чтобы использовать подключения к веб-обозревателям, вам необходимо добавить реализацию сервера websocket.

Есть два расширения для Flask, которые упрощают использование веб-карт. Расширение Flask-Sockets Kenneth Reitz является оберткой для gevent и gevent-websocket. Расширение Flask-SocketIO (бесстыдный плагин, поскольку я автор) - это оболочка для gevent и gevent-socketio на сервере, плюс Socket.IO на клиенте. Socket.IO - это протокол сокетов верхнего уровня, который может использовать веб-сокет, если он доступен, но также может использовать другие механизмы транспорта в старых браузерах.

Надеюсь, это поможет!