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

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

В настоящее время 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

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

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

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

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

EDIT

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

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.

EDIT

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

1 Ответ

0 голосов
/ 28 апреля 2018

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

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

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

gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 module:app
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...