## Demo: streams
### Streams.svelte
```svelte
```
### RealtimeClocks.svelte
```svelte
{wsTime}
/ws/time
{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');
```