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

Một client và server TCP đơn giản (tiếp tục)

May mắn là, Python không buộc bạn làm điệu nhảy này bản thân bạn mọi khi bạn có một khối dữ liệu để gửi. Như một sự
thuận tiện đặc biệt, thực thi Standard Library socket cung cấp một phương thức sendall(), cái phần code trên sử dụng
thay vào. Không chỉ là sendall() nhanh hơn làm nó bản thân bạn, vì nó được thực thi trong C, nhưng (cho những người
đọc đó người biết cái này nghĩa là gì) nó phát hành Global Interpreter Lock suốt quá trình loop của nó để rằng các
threads Python khác có thể chạy mà không tranh chấp cho đến khi tất cả dữ liệu được truyền.
Không may mắn là, không có cái gói Standard Library tương ứng được cung cấp cho lời gọi recv(), mặc dù nó chịu
cùng khả năng của truyền không hoàn thành. Bên trong thì, thực thi của hệ điều hành về recv() sử dụng luận lí rất
gần cái đó được sử dụng khi gửi.
+ Nếu không dữ liệu nào có sẵn, thì các khối recv(), và chương trình của bạn sẽ tạm dừng cho đến khi dữ liệu đi đến.
+ Nếu nhiều dữ liệu là đã có sẵn trong bộ nhớ đệm đi vào, thì bạn được cung cấp nhiều bytes như bạn đã cung cấp cho phép
recv() để phân phát.
+ Nếu bộ nhớ đệm chỉ chứa một vài dữ liệu chờ đợi nhưng không nhiều như bạn đã cung cấp cho phép recv() để trả về, thì
bạn được ngay lập tức trả về cái đã tình cờ ở đó thậm chí nếu nó không nhiều như bạn đã yêu cầu.

Chia sẻ