Hey folks, just a quick PSA after several hours of head-scratching.
The Tradovate WebSockets require a heartbeat (
Because the example documentation is for a web app, namely via use of
setInterval() support (much less
setTimeout(), etc) is up to the browser. As I found out with testing my app in Chrome, if you don’t have the tab running the app active, Chrome will lower the priority on the
setTimeout() functions. As a result, your WebSocket heartbeats may be delayed, and the socket connections could close prematurely (or just simply stop sending you data). It may not be convenient to leave the browser tab in focus 100% of the time, so a different approach may be in order.
Alternatively, running the app as a
Node.js app should get around this, as I don’t believe
setInterval() etc like this (mainly because since you’d run the app in the terminal, there isn’t a browser tab to “be inactive”). Using
Node.js would take some reconfiguration of the example docs, and can be done with
webpack but is not as straightforward as building a standalone
Node.js app. If you still want to use a browser-based client, you could also run the WebSockets in a
Node server, and serve the client front end via
webpack, but note that this adds a small layer of latency as you have to use the server to route your API requests.
In any case, something to keep in mind and think about as you design your trading apps.