2012-03-22 33 views
5

Có thể nào đó để vượt qua giới hạn giữ gìn của uwsgi không? Nếu không, cách tốt nhất để thực hiện kết nối liên tục là gì. Tôi đang sử dụng NGiNX + uWSGI (Python) và tôi muốn khách hàng có các bản cập nhật không đồng bộ từ máy chủ.uWSGI keepalive

Trả lời

1

Bạn đang nói về hai điều khác nhau. Nếu bạn muốn kết nối liên tục từ khách hàng đến ứng dụng của mình, bạn có thể muốn sử dụng chế độ không đồng bộ (thông qua ugreen, gevent ...). Bằng cách đó bạn sẽ có thể duy trì hàng ngàn kết nối đồng thời. Keepalive là một cách để định tuyến nhiều yêu cầu đến cùng một kết nối, nhưng điều này là khá vô ích cho mục đích của bạn. Thay vào đó Nếu bạn đang đề cập đến các kết nối liên tục giữa nginx và uWSGI, không có cách nào (hiện tại) trong nginx để đạt được hành vi như vậy. Bạn có thể muốn làm theo vé này:

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

nó là về fastrouter, nhưng sẽ được áp dụng trong httprouter quá. Nhưng nó vẫn còn dưới sự phát triển nặng nề.

1

Không, bạn không thể, vì uwsgi dựa trên SCGI và đóng các ổ cắm sau mỗi yêu cầu. Thay vào đó hãy sử dụng FastCGI.

1

UWSGI hỗ trợ duy trì hoạt động qua tùy chọn --http-keepalive nếu bạn nhận được yêu cầu qua http.

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

Run with:

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

Và chúng ta có thể thấy connect cuộc gọi qua 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 +++ 

Thấy không? Chỉ có một kết nối.

+0

tùy chọn '-c 1' đặt số lượng kết nối hoạt động đồng thời, nhưng không cần thiết hoạt động ở chế độ giữ nguyên: https://github.com/wg/wrk/blob/91655b5520b524fc0b802ad12220c9dcd546757e/src/http_parser.c#L2123 . UWSGI thêm 'Kết nối: đóng' vào mọi câu trả lời. Nhưng công cụ 'uwsgi' này có thể hoạt động trong thời gian tồn tại bằng cách giải quyết nếu kích thước của nội dung được biết: http://uwsgi-docs.readthedocs.io/en/latest/HTTP.html?highlight=keep-alive#http-keep -sống sót. Dù sao, ứng dụng của bạn nhận được rất nhiều yêu cầu riêng biệt. – DenisKolodin

+0

@DenisKolodin > nhưng công việc không cần thiết trong chế độ lưu động 'wrk' sử dụng http/1.1 để giữ cho hoạt động là chế độ mặc định. Thử nghiệm tương tự với strace và 'ab' hiển thị' connect' trên mọi yêu cầu. > Nhưng công cụ uwsgi này có thể hoạt động trong thời gian tồn tại bằng cách giải quyết nếu kích thước của nội dung được biết là Nó không phải là một cách giải quyết. Đó là một hành vi được ghi lại tài liệu) Hầu hết các khung công tác wsgi đều đặt đúng Độ dài nội dung. – bav

Các vấn đề liên quan