## Demo: streams ### Streams.svelte ```svelte ``` ### RealtimeClocks.svelte ```svelte
WebSocket {wsStatus}
{wsTime} /ws/time
SSE {sseStatus}
{sseTime} /sse/time
$props.id(): {islandId}
``` ### routes.ts ```ts import { Mochi } from 'mochi-framework'; import type { MochiRouteValue } from 'mochi-framework'; export const routes: Record = { '/demos/streams': Mochi.page('./src/demos/streams/Streams.svelte'), '/ws/time': (() => { const intervals = new WeakMap(); return Mochi.ws({ open(ws) { ws.send(new Date().toISOString()); const interval = setInterval(() => { ws.send(new Date().toISOString()); }, 1000); intervals.set(ws, interval); }, message() {}, close(ws) { clearInterval(intervals.get(ws)); intervals.delete(ws); }, }); })(), '/sse/time': Mochi.sse((stream) => { stream.send(new Date().toISOString()); const interval = setInterval(() => { stream.send(new Date().toISOString()); }, 1000); stream.onClose(() => clearInterval(interval)); }), }; ``` ### index.ts ```ts import { Mochi, logger } from 'mochi-framework'; await Mochi.serve({ port: 3333, development: process.env.MODE === 'development', routes: { '/': Mochi.page('./src/Home.svelte'), }, }); logger.info('Server running at http://localhost:3333'); ```