Streaming, done simply. A compact Go service that emits a continuous stream of numbers over Server‑Sent Events (SSE). Designed for clarity, testability, and production readiness.
- Incrementing integer feed over SSE
- Configurable timing and CORS via environment
- Resume support with
Last-Event-ID - Optional
startandlimitquery params - Graceful shutdown on SIGINT/SIGTERM
GET /stream
Sends event: number messages; each message contains the current integer. The id equals the integer value to enable simple resume.
Query params:
intervalMs: integer; delay between events. Default: 100start: integer; first number to emit. Default: 0limit: integer; maximum messages before the stream ends. Default: unlimited
Headers:
Last-Event-ID: resume from the next integer after this id
Other endpoints:
/index/healthliveness probe
Environment variables:
PORTserver port. Default: 8080STREAM_INTERVAL_MSdefault emit interval. Default: 100CORS_ALLOW_ORIGINvalue forAccess-Control-Allow-Origin. Default:*
go run .curl -N http://localhost:8080/streamCustom interval and bounded stream:
curl -N "http://localhost:8080/stream?intervalMs=250&start=10&limit=5"Browser example:
<script>
const s = new EventSource('/stream');
s.addEventListener('number', e => console.log(e.lastEventId, e.data));
</script>- SSE requires response streaming; ensure proxies do not buffer
- Prefer a process manager to forward signals for clean shutdown
- For cross‑origin use, pin
CORS_ALLOW_ORIGINto known origins
MIT