context.slot: tín hiệu này giới hạn khoảng dữ liệu bạn đã bỏ lỡ khi mất kết nối. Hướng dẫn này giải thích lý do kết nối bị đóng, cách kết nối lại đúng cách và cách sử dụng tín hiệu đó.
Lý do kết nối bị đóng
Mỗi lần đóng kết nối đều có mã đóng WebSocket cho biết điều gì đã xảy ra và bạn nên làm gì tiếp theo:
Máy chủ gửi ping mỗi 15 giây, vì vậy một kết nối ổn định nhưng ít hoạt động vẫn có lưu lượng. Nếu hoàn toàn không nhận được gì trong hơn một phút — không có thông báo sự kiện, không có ping — hãy coi kết nối đã ngắt và kết nối lại thay vì chờ socket thông báo.
Bộ lọc ít hoạt động và thời gian chờ do không hoạt động
Nếu bộ lọc đủ hẹp để có thể không khớp với dữ liệu nào trong 10 phút, hãy dự kiến máy chủ sẽ đóng kết nối bằng mã 1000. Xử lý trường hợp này như mọi lần đóng kết nối khác: kết nối lại, đăng ký lại và bổ sung khoảng dữ liệu thiếu như mô tả bên dưới.Kết nối lại và phát hiện khoảng dữ liệu thiếu
1
Reconnect with Backoff
Khi kết nối bị đóng — dù dự kiến hay không — hãy kết nối lại bằng cơ chế backoff theo cấp số nhân. ID đăng ký không được giữ lại sau khi kết nối lại, vì vậy hãy gửi lại
parsedTransactionSubscribe cho mọi bộ lọc đã mở.2
Track context.slot Across Disconnects
Lưu lại
context.slot cuối cùng nhận được trước khi mất kết nối. Khoảng giữa slot đó và slot đầu tiên nhận được sau khi kết nối lại chính xác là khoảng dữ liệu bạn đã bỏ lỡ — không nhiều hơn, không ít hơn.3
Backfill if You Need To
Nếu ứng dụng không thể chấp nhận khoảng dữ liệu thiếu, hãy bổ sung khoảng slot đó từ RPC: dùng
getSignaturesForAddress để liệt kê các giao dịch trong phạm vi, sau đó dùng getTransaction để truy xuất từng giao dịch. Đây là bước đối soát thủ công — bản thân Parsed Streams không phát lại dữ liệu.context.slot là dữ liệu được duy trì qua lần kết nối lại: hãy theo dõi slot cao nhất đã được xử lý hoàn toàn trước khi mất kết nối và coi mọi dữ liệu sau slot đó là khoảng cần bổ sung.
Xử lý lỗi JSON-RPC
Các yêu cầu thất bại sẽ trả về lỗi JSON-RPC thay vì kết quả, vì vậy bạn có thể phân nhánh theoerror.code:
-32602 và -32000 cho biết bản thân yêu cầu bị sai — hãy sửa bộ lọc, không thử lại nguyên trạng. -32001 và -32002 là lỗi tạm thời; hãy thử lại bằng cùng cơ chế backoff dùng để kết nối lại.
Các bước tiếp theo
Quickstart
Tài liệu tham khảo đầy đủ về giao thức: phương thức, trường bộ lọc và giới hạn.
Track Jupiter Swaps
Tạo bộ lọc mà kết nối này có thể đăng ký.