Lập trình mạng Python: giao thức UDP (phần 9)

Không đáng tin cậy, backoff, phong toả và timeouts (tiếp tục)

Một lời gọi cái chờ cho một hoạt động mạng để hoàn thành được nói là phong toả (block)
nơi gọi. Thuật ngữ blocking được sử dụng để mô tả một lời gọi như recv() cái làm máy khách
chờ cho đến khi dữ liệu mới đi đến. Khi bạn tới học phần nơi kiến trúc server được thảo
luận, sự khác biệt giữa mạng phong toả và phi phong toả sẽ hình thành lớn hơn.
Client cụ thể này bắt đầu với một chờ một phần mười giây trung bình. Cho mạng gia đình của
tôi, nơi ping times thường là một vài tá phần nghìn giây, cái này hiếm khi gây ra client gửi
một request trùng đơn giản vì trả lời bị hoãn trong quay trở lại.
Một đặc tính quan trọng của chương trình client này là cái gì xảy ra nếu timeout được đi đến.
Nó không đơn giản bắt đầu gửi ra các requests lặp lại nhiều lần tại một khoảng thời gian cố
định! Vì nguyên nhân dẫn dắt của sự mất gói dữ liệu là tắc nghẽn – khi bất cứ ai biết ai đã cố
gửi dòng dữ liệu lên thông thường trên một DSL modem cùng lúc cái các ảnh và videos đang uploading
– thứ cuối cùng bạn muốn làm là phản ứng với một gói dữ liệu bị bỏ có thể bằng cách gửi thậm chí
nhiều hơn chúng.
Vì vậy, client này sử dụng một kĩ thuật được biết đến như là exponential backoff, nơi cố gắng của
nó trở nên kém thường xuyên hơn. Cái này phục vụ mục đích quan trọng của làm sống một vài requests
hay replies bị bỏ, trong khi làm nó có thể rằng một mạng tắc nghẽn sẽ phục hồi chậm khi tất cả các
clients hoạt động backoff trên nhu cầu của chúng và dần dần gửi ít gói dữ liệu hơn. Mặc dù ở đó tồn
tại thuật toán tưởng tượng hơn exponential backoff – ví dụ, phiên bản Ethernet của thuật toán thêm một
vài ngẫu nhiên để rằng hai cards mạng cạnh tranh không có khả năng back off chính xác trên cùng kế hoạch
– hiệu ứng cơ bản có thể giành được hoàn toàn đơn giản bằng cách nhân đôi thời gian hoãn mỗi lần rằng
một reply không được nhận.

Chia sẻ

Leave a Reply

Your email address will not be published. Required fields are marked *