Python heroku настроить procfile gunicorn + gevent для приложения чата socket.io | RuntimeError: вам нужно использовать сервер gevent-websocket

У меня есть работающее приложение чата на локальном хосте, но оно не работает на героку (Вчерашний вопрос). После некоторых исследований я думаю, что проблема в том, как я запускаю приложение.

Procfile в настоящее время:

web: gunicorn adult_main:app

Мне нужно использовать gevent в сочетании с gunicorn. Таким образом, я должен быть в состоянии иметь макс. 1000 подключений socket.io, чего мне на данный момент достаточно.

Я уже установил и добавил gevent в папку requirements.txt. Вот выдержка из файла:

Flask-SocketIO==2.9.6
gunicorn==19.7.1
gevent==1.2.2
gevent-socketio==0.3.6
gevent-websocket==0.10.1

Но я не понимаю, как правильно запустить приложение. Кстати, я использую бесплатный уровень heroku, чтобы все проверить.

Я попробовал несколько решений, которые нашел в Интернете, но я не полностью их понимаю, и я еще не нашел документации по этому вопросу. Вот некоторые из моих попыток:

web: gunicorn -k gevent-socketio adult_main:app
web: gunicorn -k gevent adult_main:app

Я тоже пытался запустить без гуникорна, но думаю, что это было совершенно неправильно. Я на правильном пути здесь?

ИЗМЕНИТЬ

Мне удалось добиться некоторого прогресса с:

web: gunicorn -k gevent -w 1 adult_main:app

Приложение теперь не вылетает при запуске, но в веб-консоли вижу ошибку:

socket.io.js:7 WebSocket connection to 'wss://my-    
project.herokuapp.com/socket.io/? 
EIO=3&transport=websocket&sid=0022c1937df648bbab836bfcb4c35' failed: Error   
during WebSocket handshake: Unexpected response code: 500

В логах хероку:

RuntimeError: You need to use the gevent-websocket server.

ИЗМЕНИТЬ

Несмотря на то, что я вижу эти ошибки, чат теперь работает на героку. Это действительно странно. Возможно, я могу установить сейчас только 1 соединение, как теперь продолжить?


person Roman    schedule 27.04.2018    source источник


Ответы (1)


Ошибка правильная, вам нужно использовать веб-сервер gevent-websocket, а не собственный веб-сервер gevent, который поставляется с gunicorn.

Кажется, вы ищете ответы повсюду. Я бы посоветовал вам использовать документацию Flask-SocketIO как окончательный источник правды, поскольку я постоянно обновляю ее.

Для этого конкретного случая раздел документации Gunicorn показывает, как вам нужно запустить сервер:

gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 module:app
person Miguel    schedule 28.04.2018