Điều này thực sự phụ thuộc vào sự lựa chọn của bạn của giao thức.
Simple lệnh Nghị định thư
Nếu giao thức máy chủ của bạn luôn luôn chờ đợi một tin nhắn từ khách hàng, bạn sẽ luôn có một cấp phát async_read
cho mỗi khách hàng được kết nối. Điều này sẽ trở lại với một lỗi (EOF) khi một khách hàng ngắt kết nối trong bất kỳ thời trang nào.
Keep-alive là một cách tiếp cận như đã nói ở trên, nhưng việc chờ xử lý của async_read
chỉ tốt cho mục đích này.
Giao thức sự kiện đơn giản
Giao thức sự kiện đơn giản liên quan đến khách hàng đang nghe dữ liệu và máy chủ gửi dữ liệu đó. Trong giao thức này, máy chủ không biết liệu máy khách có ở đó không, bởi vì máy khách chỉ chấp nhận dữ liệu và tiếp tục chờ đợi. Máy khách không bao giờ gửi máy chủ bất kỳ thông báo nào.
Điều này thể hiện yêu cầu để duy trì hoạt động. Các hoạt động async_write
không hoạt động theo cùng cách mà async_read
thực hiện khi một máy khách đã bị ngắt kết nối.
Có các tùy chọn khác, như việc máy chủ luôn có hoạt động async_read
đang chờ xử lý cố đọc 1 byte. Điều này sẽ thất bại khi máy khách ngắt kết nối tương tự như thảo luận về Giao thức Lệnh Đơn giản ở trên, nhưng sẽ không bao giờ thành công vì khách hàng không gửi dữ liệu qua Giao thức Sự kiện Đơn giản.
Bạn cần nhịp tim cấp ứng dụng - không có cách nào đáng tin cậy khác. –