何とかuwsgiのキープアライブ制限をパスすることはできますか?そうでない場合は、永続的な接続の実装の最良の方法は何ですか。私はNGiNX + uWSGI(Python)を使用しています。クライアントからサーバーからの非同期更新を取得します。uWSGIキープアライブ
5
A
答えて
1
あなたは2つの異なることについて話しています。あなたのクライアントからあなたのアプリケーションへの永続的な接続を望むなら、非同期モード(ugreen、gevent ...経由で)を使いたいかもしれません。これにより、数千の同時接続を維持できます。キープアライブは複数のリクエストを同じ接続にルーティングする方法ですが、これはあなたの目的にはあまり役に立ちません。代わりにnginxとuWSGI間の永続的な接続を参照している場合、そのような動作に達する方法は(現在)nginxにありません。
http://projects.unbit.it/uwsgi/ticket/66
それはfastrouterについてですが、あまりにもhttprouterに適用されます:あなたはこのチケットをフォローしたいことがあります。しかし、それはまだ重い開発の下にあります。
1
いいえ、あなたはSCGIに基づいてuwsgiを実行し、リクエストごとにソケットを閉じますので、できません。代わりにFastCGIを使用してください。
1
UWSGIは、http経由でリクエストを受信すると、 - keep-keepaliveオプションを使用してキープアライブをサポートします。 straceの経由
/tmp$ uwsgi --http=:8000 --http-keepalive -w app &> /dev/null
そして、我々が見ることができるconnect
呼び出し::と
/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]
実行
~$ 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つの接続のみ。
関連する問題
- 1. HTTPキープアライブとTCPキープアライブ
- 2. キープアライブDropwizard
- 3. Unix:TCPキープアライブ
- 4. UWSGI
- 5. py.testタイムアウト/キープアライブ/ハートビート?
- 6. AsioとHTTPキープアライブ
- 7. キープアライブsqlトランザクション
- 8. Pythonボトル対uwsgi /ボトル対nginx/uwsgi/bottle
- 9. Nodejs Unixドメインソケットでキープアライブ
- 10. Apache HttpClient TCPキープアライブ(ソケットキープアライブ)
- 11. PoolingHttpClientConnectionManagerとキープアライブ設定
- 12. nginxキープアライブとDNSリゾルバ
- 13. 接続キープアライブ問題
- 14. vue.jsページリフレッシュ後にキープアライブ
- 15. django + uwsgi in docker
- 16. uwsgiソケット権限
- 17. uWSGIは、Windows
- 18. Django uwsgiインポートエラー
- 19. uwsgi postforkが
- 20. TTLとキープアライブの違い
- 21. gedit - FTP編集をキープアライブ
- 22. python-requestsモジュール内でキープアライブ
- 23. TCPキープアライブPDO接続パラメータ
- 24. キープアライブ可能なHTTPサーバー
- 25. MQTTの無制限キープアライブ
- 26. HTTPキープアライブ別のホストに
- 27. 接続:nginxウェブサーバでキープアライブ
- 28. NginxとWSGIとuWSGi
- 29. ジヴェントとスレッドのUwsgi
- 30. uWSGIレイジーアプリとのThreadPool
'-c 1'オプションは同時にどのくらいのアクティブなコネクションをアクティブにするかを設定しますが、キープアライブモードでは必要ありません:https://github.com/wg/wrk/blob/91655b5520b524fc0b802ad12220c9dcd546757e/src/http_parser.c#L2123 。 UWSGIはすべての応答に 'Connection:close'を追加します。しかし、この 'uwsgi'ツールは、コンテンツのサイズがわかっている場合、回避策によってキープアライブで動作します:http://uwsgi-docs.readthedocs.io/en/latest/HTTP.html?highlight=keep-alive#http-keep -alive。とにかく、あなたのアプリケーションはたくさんの別々のリクエストを受け取ります。 – DenisKolodin
@DenisKolodin >キープアライブモードでは動作している必要はありません。 'wrk'はhttp/1.1を使用するので、キープアライブはデフォルトモードです。 straceと 'ab'の同じテストでは、リクエストごとに' connect'が表示されます。 >しかし、このuwsgiツールは、コンテンツのサイズがわかっている場合、回避策によってキープアライブで動作する可能性があります。 回避策ではありません。これは文書化された動作です)ほとんどのwsgiフレームワークは正しいContent-Lengthを設定します。 – bav