Skip to content

Task 22: Reconnected WebSocket Replays the Entire Trace Instead of Resuming Where It Left Off #318

Description

@grantfox-oss

Even if a WebSocket successfully reconnects after a dropout, a critical data integrity flaw remains: the server views the reconnection as a brand new client. Consequently, the server will restart the tracing simulation from the very beginning. This forces the client to download and process massive amounts of duplicate data that it has already received prior to the disconnect. In heavy simulation environments, downloading redundant megabytes of JSON trace nodes severely degrades bandwidth and forces the client to manually deduplicate the event stream.

Issues/what to fix

The script must implement an intelligent state tracking mechanism. A persistent variable (e.g., let lastSeenNodeId = null or lastLedgerSequence) must be declared outside the connection scope. Whenever a trace_node or trace_started message is successfully parsed from the server, this variable must be immediately updated with the latest identifier. When the reconnection engine successfully re establishes the socket, the initial ws.send() JSON payload must be dynamically augmented. Instead of just requesting { tx_hash: TX_HASH }, it must include the synchronization cursor: { tx_hash: TX_HASH, resume_from: lastSeenNodeId }. This signals to the server to fast forward the simulation and only broadcast nodes that occurred after the disconnect timestamp.

Files location

examples/api clients/websocket client/index.js

Expected result

The WebSocket client will possess perfect temporal awareness. It will not only survive catastrophic network drops, but it will resume the stream precisely at the exact computational node where it was interrupted, resulting in absolutely zero data loss, zero duplicate processing, and optimal bandwidth utilization.

Contributor telegram group

https://t.me/+sII7WPhll2liMGNk

Metadata

Metadata

Assignees

Labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions