是否有可能通过uwsgi的keepalive限制?如果不是,那么持久连接实现的最佳方式是什么。我正在使用 NGiNX + uWSGI (Python),我希望客户端从服务器获得异步更新。
问问题
5513 次
2 回答
6
如果您通过 http 接收请求,UWSGI 支持通过 --http-keepalive 选项保持活动。
/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 +++
看?只有一个连接。
于 2017-08-08T13:18:07.390 回答
0
你在谈论两个不同的事情。如果您想要从客户端到您的应用程序的持久连接,您可能需要使用异步模式(通过 ugreen、gevent...)。这样,您将能够维持数千个并发连接。Keepalive 是一种将多个请求路由到相同连接的方法,但这对您的目的毫无用处。相反,如果您指的是 nginx 和 uWSGI 之间的持久连接,那么 nginx 中(当前)没有办法达到这种行为。您可能需要关注这张票:
http://projects.unbit.it/uwsgi/ticket/66
它是关于 fastrouter 的,但也将应用于 httprouter。但它仍在大力发展中。
于 2012-03-22T13:50:50.660 回答