是否有可能以某種方式通過uwsgi的保持活動限制?如果不是,持久連接實施的最佳方式是什麼。我使用的是NGiNX + uWSGI(Python),我希望客戶端可以從服務器獲得異步更新。uWSGI保持活動
5
A
回答
1
你在談論兩件不同的事情。如果你想要從你的客戶端連接到你的應用程序,你可能想要使用異步模式(通過ugreen,gevent ...)。這樣你就可以維護數千個併發連接。 Keepalive是將多個請求路由到相同連接的一種方式,但這對於您的目的來說毫無用處。相反如果你指的是nginx和uWSGI之間的持久連接,那麼nginx目前沒有辦法達到這種行爲。您可能需要遵循此票:
http://projects.unbit.it/uwsgi/ticket/66
它是關於fastrouter,但將在httprouter也可以應用。但仍處於重大發展階段。
1
不,你不能,因爲uwsgi基於SCGI並在每次請求後關閉套接字。改用FastCGI。
1
如果通過http接收請求,UWSGI支持通過--http-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. 讓活動保持活力
- 2. 保持Firebug活動
- 3. HttpRuntime.Cache保持活動
- 4. 在活動之間保持locationListener活動
- 5. 保持活動屬性onActivityResult
- 6. Android保持活動狀態
- 7. Android:保持GPS活動
- 8. NSURLConnection和保持活動
- 9. 使Cookie保持活動
- 10. 設置「不保留活動」時保持活動
- 11. jQuery保持活動狀態與動作
- 12. Android - 在動畫期間保持活動
- 13. 如何激活保持活動狀態,http://www.webpagetest.org表示保持活動狀態未激活
- 14. 保持懸停狀態在整個div中保持活動
- 15. 連接池會保持oracle會話保持活動狀態嗎?
- 16. 配置保持活動狀態始終保持連接狀態
- 17. 不保持活躍
- 18. 保持Ajax存活
- 19. FutureTask保持活躍
- 20. 讓Watin會話保持活動狀態
- 21. Ajax請求頭保持活動
- 22. HTTP響應連接保持活動
- 23. nginx的活動連接保持增長
- 24. 如何保持Android活動的狀態
- 25. LDAP套接字保持活動狀態
- 26. 保持對話以上活動
- 27. Swift:TCP套接字保持活動
- 28. Python 3.5.2套接字保持活動
- 29. 在NSURLConnection中禁用保持活動
- 30. 使屏幕保持活動狀態
'-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 -活。無論如何,你的應用程序會得到很多單獨的請求。 – DenisKolodin 2017-09-07 09:18:29
@DenisKolodin >但在keep-alive模式下不需要工作'wrk'使用http/1.1,因此keep-alive是默認模式。用strace和'ab'進行的相同測試顯示每個請求都有'connect'。 >但是,如果內容大小已知,則此uwsgi工具可以通過解決方法保持活動狀態 這不是解決方法。這是一個記錄的行爲)大多數wsgi框架設置正確的Content-Length。 – bav 2017-09-07 21:34:28