A server sends events one at a time over a single open connection. Each event includes the time it was sent, and this page records the time it arrived. If those two times are close, the stream is working. If events pile up and land together at the end, something in between is holding them.
1Pick a situation
Each option changes one thing: how the server behaves, or what sits between the server and your browser. Run a few to see the difference between a stream that works and one that does not.
2Run it
Pick a situation above to see what it does.
Point this at any SSE endpoint, in any environment. The endpoint has to allow
this page's origin with an Access-Control-Allow-Origin header, or
the browser will block the request before anything arrives.
If each event's JSON carries the time the server sent it, this measures the
exact delay per event. Common field names are found automatically, and epoch
seconds, epoch milliseconds and ISO strings all work. Without such a field it
can still tell you whether events were delivered one at a time or in clumps,
but it cannot separate a slow server from a buffering network.
3What happened
Each mark is one event, placed left to right by time. When the stream works the two rows match up. When something is holding events back, the top row stays evenly spaced and the bottom row bunches together.
Each event
Delay is how long the event took to get here after the server sent it. Anything under a quarter second is fine. The age counts up while the test runs and stops when it ends.