Sau khi kết nối lại WebSocket qua proxy, hãy khôi phục cả phiên
Chủ động khôi phục các đăng ký của ứng dụng và trạng thái tin nhắn chưa chắc chắn sau khi thiết lập kết nối WebSocket mới qua proxy.
Callback kết nối lại chạy và socket mới mở ra. Đó là khôi phục tầng truyền tải. Nó không nhất thiết có nghĩa là các đăng ký, xác nhận tin nhắn hay phiên ứng dụng của bạn đã tiếp tục từ chỗ kết nối trước dừng lại.
Ngay cả cùng một điểm cuối proxy cũng có thể tạo ra kết nối ra mới. IP ra thay đổi cũng có thể kích hoạt chính sách phiên riêng của đích. Hãy coi socket mới là một kết nối mới và tuân theo trao đổi khôi phục đã được ứng dụng ghi lại. Quyết định xem quy trình làm việc có nên giữ tuyến proxy của nó khi kết nối lại hay không.
Giữ nhiều hơn một chút so với URL cuối cùng
Trạng thái khôi phục hữu ích có thể bao gồm danh tính phiên được cấp phép, các đăng ký mong muốn, mã định danh sự kiện được xác nhận cuối cùng và các thao tác vẫn đang chờ xác nhận. Những trường đó thuộc giao thức ứng dụng; WebSocket không định nghĩa token tiếp tục phổ quát.
Quyết định xem nên tiếp tục từ con trỏ, lấy ảnh chụp mới hay chấp nhận khoảng trống. Nếu nguồn sự kiện không cung cấp giao diện phát lại, kết nối lại nhanh hơn không thể chứng minh rằng không có tin nhắn nào bị bỏ lỡ.
Gửi hai lần có thể nghĩa là làm hai lần
Một tin nhắn được xếp hàng cục bộ trước khi ngắt kết nối có thể chưa bao giờ rời khỏi máy khách. Một tin khác có thể đã tới máy chủ trong khi xác nhận của nó bị mất. Gửi lại một cách mù quáng mọi lệnh chưa được xác nhận sẽ coi hai trường hợp đó là giống nhau.
Hãy dùng mã định danh yêu cầu của dịch vụ, hỗ trợ idempotency hoặc cơ chế đối soát khi có sẵn. Kết nối lại tầng truyền tải không thể làm cho một thao tác ứng dụng trở nên có thể đảo ngược hay tự động loại bỏ bản trùng của nó.
Giữ các lần thử kết nối lại có giới hạn và nhịp độ theo chính sách của ứng dụng. RFC 6455 khuyến nghị lùi lại sau khi đóng bất thường; một loạt máy khách thử lại ngay lập tức có thể làm tăng tải của sự cố.
Ghi lại tuyến proxy mà mỗi lần thử đã chọn, nhưng tách việc khôi phục tuyến khỏi việc khôi phục ứng dụng. “Đã kết nối lại” là bằng chứng hữu ích. “Đã bắt kịp và sẵn sàng gửi thêm việc” cần trao đổi ứng dụng bổ sung để xác lập điều đó.