Skip to main content
Cơ chế phân phối là tối đa một lần — không có tính năng phát lại. Mọi dữ liệu được xác nhận trong thời gian bạn mất kết nối sẽ không được gửi lại, vì vậy ứng dụng máy khách trong môi trường production cần phát hiện khoảng trống và quyết định có bổ sung dữ liệu hay không. Tín hiệu để xác định khoảng trống là 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 theo error.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ý.