8

uwsgiのキープアライブ制限をどうにかして通過することは可能ですか? そうでない場合、永続的な接続を実装する最良の方法は何ですか? 私は NGiNX + uWSGI (Python) を使用しており、クライアントがサーバーから非同期に更新されるようにしたいと考えています。

4

2 に答える 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

そしてconnect、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 +++

見る?接続は 1 つだけです。

于 2017-08-08T13:18:07.390 に答える
0

あなたは2つの異なることについて話している. クライアントからアプリへの永続的な接続が必要な場合は、(ugreen、gevent などを介して) 非同期モードを使用することをお勧めします。そうすれば、何千もの同時接続を維持できます。キープアライブは、複数のリクエストを同じ接続にルーティングする方法ですが、これは目的にはほとんど役に立ちません。代わりに、nginx と uWSGI 間の永続的な接続について言及している場合、nginx でそのような動作に到達する方法は (現在) ありません。このチケットをフォローすることをお勧めします:

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

これは fastrouter に関するものですが、httprouter でも適用されます。しかし、それはまだ大規模な開発中です。

于 2012-03-22T13:50:50.660 に答える