Bối cảnh:
Tôi có một số mã đang kết nối với máy chủ để lấy dữ liệu. Tuy nhiên, tại một số điểm chương trình đã đi vào một trạng thái mà nó đã không kết nối với máy chủ. Vấn đề chúng tôi đã thấy là máy chủ đã liên tục định thời gian khi chúng tôi cố gắng kết nối lại.Đóng tất cả các kết nối mạng cơ bản
Plugin:
Chúng tôi đã đặt thời gian chờ thành giá trị mặc định được plugin mạng của chúng tôi sử dụng (plugin Thrift). Các giá trị này là thời gian chờ 100k mili giây và thời gian chờ ghi đè 300k milli giây. Không chính xác thời gian chờ ngắn. Ngoài ra, mỗi lần chúng tôi cố gắng kết nối lại, chúng tôi tạo lại lớp của plugin, vì vậy bất kỳ giá trị nào mà cài đặt trong nội bộ được đặt lại mỗi lần chúng tôi cố gắng kết nối lại. Tôi tin rằng thời gian chờ không phải là vấn đề. Và tôi tin rằng plugin không phải là vấn đề.
Mạng:
Chúng tôi đã thấy những thời gian chờ lặp lại này xảy ra trong nửa giờ. Khi chúng tôi khởi động lại dịch vụ (không phải máy), nó ngay lập tức trở lại trực tuyến. Vì vậy, tôi biết nó không phải là một vấn đề mạng. Điều đó khiến tôi tin rằng đó là điều gì đó trong mã của chúng tôi đang xâm nhập vào trạng thái mạng không hợp lệ. Ngoài ra, nó là một trạng thái mà chúng tôi không thể kiểm soát, vì plugin của chúng tôi ẩn tất cả các công cụ mạng tốt từ chúng tôi - bao gồm hết thời gian chờ, cờ cố định và nhóm kết nối (trong số những người khác). Về cơ bản, chúng tôi không có quyền truy cập vào thành viên HTTPWebReqest.
Câu hỏi:
Khi cài đặt mạng của chúng tôi vào trạng thái này, chúng tôi cố gắng đóng tất cả các kết nối và kết nối lại với máy chủ. Mục đích là để tiêu diệt tất cả các kết nối đang hoạt động để thiết lập lại bất kỳ trạng thái nào mà chúng ta có được. Tuy nhiên, khi chúng tôi cố gắng kết nối lại, chúng tôi sẽ bị hết thời gian chờ kết nối lại. Bằng cách nào đó (có thể do KeepAlive và TCP Pipelining, mà chúng tôi không thể kiểm soát), các kết nối mạng vẫn mở ngay cả khi chúng tôi đã đóng tất cả các kết nối. Điều này khiến chúng tôi ở trạng thái xấu và ngăn chúng tôi chuyển các kết nối của chúng tôi đến máy chủ.
Câu hỏi:
Làm thế nào tôi có thể tiêu diệt tất cả các kết nối cơ bản đến máy chủ để buộc kết nối lại?
Cá nhân, tôi khuyên bạn nên thay đổi thư viện bạn đang sử dụng. Tuy nhiên, vì tôi là bạn, tôi biết rằng đó không phải là một lựa chọn. – Richard
+1. Đẹp tự nhận xét và trả lời – Danexxtone