uWSGI keepalive

时间:2012-03-22 13:05:14

标签: python nginx uwsgi

是否有可能以某种方式通过uwsgi的keepalive限制?如果不是,那么持久连接实现的最佳方式是什么。我正在使用NGiNX + uWSGI(Python),我希望客户端能够从服务器进行异步更新。

2 个答案:

答案 0 :(得分:3)

如果您通过http收到请求,UWSGI会通过--http-keepalive选项支持keep-alive。

/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]

使用以下命令运行:

/tmp$ uwsgi --http=:8000 --http-keepalive -w app &> /dev/null

我们可以通过strace看到connect来电:

~$ 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 +++

请参阅?只有一个连接。

答案 1 :(得分:0)

你在谈论两件不同的事情。如果您希望从客户端到应用程序的持久连接,您可能希望使用异步模式(通过ugreen,gevent ...)。通过这种方式,您将能够维持数千个并发连接。 Keepalive是一种将多个请求路由到相同连接的方法,但这对您的目的来说是无用的。相反如果你指的是nginx和uWSGI之间的持久连接,nginx中没有办法(当前)达到这种行为。您可能想要关注此票:

http://projects.unbit.it/uwsgi/ticket/66

它是关于fastrouter的,但也将在httprouter中应用。但它仍处于重大发展阶段。