2015-04-03 3 views
2

Я создаю сайт на Flask. Вся связь с сервером проходит через WebSockets. Когда я использую gunicorn с TCP/IP:flask-socketio + gunicorn + nginx через файл сокета unix [Errno -2]

gunicorn --worker-class socketio.sgunicorn.GeventSocketIOWorker chat:app --bind=127.0.0.1:8800 

Все работает отлично. Но когда я использую Unix файла сокета:

gunicorn --worker-class socketio.sgunicorn.GeventSocketIOWorker chat:app -b unix:///var/sockets/gunicorn.sock 

У меня есть ошибки в журнале:

[[email protected] legalize]# gunicorn --worker-class socketio.sgunicorn.GeventSocketIOWorker chat:app -b unix:///var/sockets/gunicorn.sock 
2015-04-03 13:32:26 [25392] [INFO] Starting gunicorn 18.0 
2015-04-03 13:32:26 [25392] [INFO] Listening at: unix:/var/sockets/gunicorn.sock (25392) 
2015-04-03 13:32:26 [25392] [INFO] Using worker: socketio.sgunicorn.GeventSocketIOWorker 
2015-04-03 13:32:26 [25397] [INFO] Booting worker with pid: 25397 
FAILED to start flash policy server: [Errno -2] Name or service not known: ('/', 10843) 
FAILED to start flash policy server: [Errno -2] Name or service not known: ('/', 10843) 
FAILED to start flash policy server: [Errno -2] Name or service not known: ('/', 10843) 

Как я могу исправить эту ошибку?

ответ

1

Проект gevent-socketio (зависимость Flask-SocketIO, которая обрабатывает протокол Socket.IO), запускает вторичный веб-сервер, используемый для транспорта Flash. Этот сервер прослушивается на том же хосте, что и ваш главный сервер, но на порту 10843. Ясно, что логика не работает, когда главный сервер прослушивает Unix-сокет.

Нужно ли вам предлагать поддержку Flash? Если нет, я рекомендую вам полностью отключить его, установив переменную окружения POLICY_SERVER на ненулевое значение. Вот логика, которая отключает сервер политики, если вам интересно: https://github.com/abourget/gevent-socketio/blob/668d11edbd62052cde1583be1e1d0512c930f16d/socketio/sgunicorn.py#L43-L47

Смежные вопросы