Eu criei um servidor Django que está fazendo uso de django-channels para comunicação websocket. Quando executo o servidor com o NGINX, há um atraso inicial na comunicação do websocket entre o servidor e o cliente. Após o atraso inicial, todos os dados que faltam chegam em um período de tempo muito curto e, em seguida, ele começa a se comunicar em tempo real.
Eu testei o servidor autônomo e com apenas uma instância Daphne sem o proxy NGINX e não há atraso inicial na comunicação.
Abaixo está minha configuração NGINX. Se alguém tiver alguma ideia do motivo pelo qual eu estaria recebendo um atraso inicial de 10 segundos na comunicação via websocket, seria muito apreciado.
worker_processes 1;
events {
worker_connections 1024;
}
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 0;
#gzip on;
# the upstream component nginx needs to connect to
upstream django {
server 127.0.0.1:8001;
}
server {
listen 80;
client_max_body_size 20M;
server_name localhost;
location / {
proxy_pass http://django;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
}
Informações adicionais: ele recebe o mesmo número de mensagens toda vez que as mensagens são enviadas, independentemente de quão rápido as mensagens são colocadas na fila, o que significa que o atraso da mensagem não é baseado em tempo, mas parece estar baseado em estouro de buffer? Como não enviará nenhum dado até que um buffer de algum tipo seja preenchido?