Я прочитал о библиотеке веб-сокетов Python , и она действительно сработала для меня. Особенно меня порадовал стандартный способ подключения из веб-клиента:
var ws = new WebSocket("ws://127.0.0.1:5678/")
ws.onmessage = function (event) ...
Нет импорта, все стандартно и поддерживается современными браузерами из коробки. Пока все хорошо, но Python-приложение - это Flask с Connexion для REST API на основе swagger.yaml. Библиотека Websockets не может использовать один и тот же порт с Flask / Connexion. Хорошо, есть библиотека Flask-socketio , которую я смог запустить с Connexion и сервером как REST, так и Websockets. Но для меня это имеет несколько недостатков, и я прошу вашей помощи:
- На клиенте я вынужден использовать socketio, так как WebSocket с поддержкой браузера не будет работать с Flask-socketio. Это всегда так, или я делаю что-то не так (это связано с вопросом 2).
- До сих пор я успешно запускал Flask-socketio в режиме отладки Flask (python my_flask_source.py). Я прочитал документацию Flask-socketio и понял, что этот режим не поддерживает веб-сокеты, только длительный опрос. Действительно, я вижу много запросов GET / POST, которые приходят каждые несколько секунд и обслуживаются Flask. Заказчик использует uWSGI для производства, однако мне не очень понятно, с чего начать воспроизводить его конфигурацию в процессе разработки. Я довольно новичок в Python, но, прочитав как можно больше соответствующих источников, я понял, что сервер разработки Flask является многопоточным, то есть он может обслуживать множество параллельных запросов в одном процессе. Но похоже, что uWSGI является однопоточным, и для достижения высокой пропускной способности приходится порождать множество процессов. Также есть модуль gevent:
uwsgi --http: 5000 --gevent 1000 --http-websockets --master --wsgi-файл app.py - callable app
Есть ли хорошо написанные пошаговые инструкции по развертыванию сервера Flask-socketio под uWSGI для производства? Nginx входит в игру? Смогу ли я использовать веб-сокеты в браузере или все-таки socketio?