uWSGI- Flask использовать одного и того же работника для одного и того же пользователя - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть простое приложение, которое обслуживает данные через сокет, и мне нужно придерживаться некоторого работника для какого-то пользователя. Это очень похоже на nginx конфиг и называется липкими заголовками. Но nginx не знает, сколько у меня работников. uWSGI знает и может служить конкретным c работником для пользователя. Но я не знаю, как это сделать. Все, что мне нужно, потому что с несколькими рабочими у меня есть проблема состояния гонки

Это моя конфигурация

[uwsgi]
module = wsgi

socket = backend.sock
processes = 16
master = true
enable-threads = true
single-interpreter = true
vacuum = true
die-on-term = true
thunder-lock = true

http-websockets = true
http-socket = :1234
chmod-socket = 660
gevent = 1024
gevent-early-monkey-patch = 1

, когда я устанавливаю процессы 1, все работает отлично, потому что пользователь обслуживается одним и тем же работником 1007 *

1 Ответ

0 голосов
/ 27 апреля 2020
processes = 4
socket = $(PWD)/run/socket_http
socket = $(PWD)/run/socket_ws
map-socket = 0:1,2,3
map-socket = 1:4

Это посвящает 1 работника (четвертого) для веб-сокета. В nginx вы, наконец, можете сделать что-то вроде этого:

location /socket.io/ {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        include uwsgi_params;
        uwsgi_pass unix:/path/to/project/run/socket_ws;
    }

https://github.com/miguelgrinberg/Flask-SocketIO/issues/1195#issuecomment -619586400

...