¿Es posible de alguna manera pasar a través de la limitación keepalive de uwsgi? De lo contrario, ¿cuál es la mejor forma de implementación de conexión persistente? Estoy usando NGiNX + uWSGI (Python), y quiero que los clientes tengan actualizaciones asincrónicas desde el servidor.uWSGI keepalive
Respuesta
Estás hablando de dos cosas diferentes. Si desea conexiones persistentes de sus clientes a su aplicación, es posible que desee utilizar modos asíncronos (a través de ugreen, gevent ...). De esa manera, podrá mantener miles de conexiones simultáneas. Keepalive es una forma de encaminar múltiples solicitudes a las mismas conexiones, pero esto es bastante inútil para su propósito. En cambio, si se refiere a las conexiones persistentes entre nginx y uWSGI, no hay forma (actualmente) en nginx de alcanzar tal comportamiento. Es posible que desee seguir este billete:
http://projects.unbit.it/uwsgi/ticket/66
se trata de la fastrouter, pero se aplicará en httprouter también. Pero todavía está bajo un gran desarrollo.
No, no se puede, porque uwsgi basado en SCGI y cierra los sockets después de cada solicitud. Use FastCGI en su lugar.
UWSGI es compatible con keep-alive mediante la opción --http-keepalive si recibe solicitudes a través de http.
/tmp$ cat app.py
def application(env, start_response):
content = b"Hello World"
start_response('200 OK', [
('Content-Type','text/html'),
('Content-Length', str(len(content))),
])
return [content]
Ejecutar con:
/tmp$ uwsgi --http=:8000 --http-keepalive -w app &> /dev/null
y podemos ver connect
llamadas a través de strace:
~$ strace -econnect wrk -d 10 -t 1 -c 1 http://127.0.0.1:8000
connect(3, {sa_family=AF_INET, sin_port=htons(8000), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
Running 10s test @ http://127.0.0.1:8000
1 threads and 1 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 92.32us 56.14us 2.81ms 97.20%
Req/Sec 11.10k 389.34 11.84k 68.32%
111505 requests in 10.10s, 7.98MB read
Requests/sec: 11040.50
Transfer/sec: 808.63KB
+++ exited with 0 +++
Ver? Solo una conexión.
- 1. uwsgi + django vía Nginx - uwsgi settings/spawn?
- 2. ¿WebClient usa KeepAlive?
- 3. WCF wsHttpBinding con http keepalive
- 4. uWSGI + nginx para el proyecto django, error con strting uwsgi
- 5. Django y Python + uWSGI
- 6. permisos socket uwsgi
- 7. uWSGI problema host virtual
- 8. Desplegando Pilones con uWSGI
- 9. Android http solución keepalive, pero ¿es permanente?
- 10. WSGI vs uWSGi con Nginx
- 11. Django uwsgi error de importación
- 12. registro de Django bajo UWSGI
- 13. script de nginx uwsgi y cgi python
- 14. Error al instalar uWSGI en mac
- 15. uwsgi: opción no reconocida '--module = MyProject.wsgi: aplicación'
- 16. Implementando Django (fastcgi, apache mod_wsgi, uwsgi, gunicornio)
- 17. Comparar nginx + Apache + mod_wsgi vs nginx + uWSGI?
- 18. nginx + uwsgi: - modificador no disponible solicitado: 0 -
- 19. HTTP persistente/keepalive con la biblioteca PHP Curl?
- 20. Nginx TCP (WebSockets) Tiempo de espera/Keepalive Config
- 21. El uso adecuado de KeepAlive en Apache .htaccess
- 22. ¿Cómo enviar el encabezado KeepAlive correctamente en C#?
- 23. Cómo configurar el tiempo de espera de keepalive en Android?
- 24. Mensaje de error de Meteor: "Error al recibir keepalive! Salir".
- 25. ¿Cómo hacer la solicitud de keepalive http con curl?
- 26. Sirviendo múltiples sitios de Django con Nginx con UWSGI
- 27. Cómo hacer que uwsgi --emperor se ejecute como daemon
- 28. ¿Cómo ejecutar múltiples sitios django en Nginx y uwsgi?
- 29. Módulo de importación Django, Virtualenv, nginx + uwsgi wsgi error
- 30. ¿Cómo configurar la recarga automática con Flask + uWSGI?
La opción '-c 1' establece la cantidad de conexiones activas simultáneamente, pero no es necesario funciona en modo keep-alive: https://github.com/wg/wrk/blob/91655b5520b524fc0b802ad12220c9dcd546757e/src/http_parser.c#L2123 . UWSGI agrega 'Connection: close' a cada respuesta. Pero esta herramienta 'uwsgi' podría funcionar en keep-alive por una solución si se conoce el tamaño del contenido: http://uwsgi-docs.readthedocs.io/en/latest/HTTP.html?highlight=keep-alive#http-keep -viva. De todos modos, su aplicación recibe muchas solicitudes por separado. – DenisKolodin
@DenisKolodin > pero no es necesario funciona en modo keep-alive 'wrk' usa http/1.1 así que keep-alive es un modo predeterminado. La misma prueba con strace y 'ab' muestra' connect' en cada solicitud. > Pero esta herramienta uwsgi podría funcionar en keep-alive por una solución si se conoce el tamaño del contenido No es una solución. Es un comportamiento documentado) La mayoría de los frameworks de wsgi configuran Content-Length correctos. – bav