einbahn
v0.0.1
Published
sever sent events with namespaces and channels
Downloads
7
Readme
einbahn
Server-Sent Events with Namespaces and Channels
- tested with http1, http2, koa and express
- namespaces(like namespaces in socket.io or rabbitmq)
- channels(like rooms in socket.io)
- automatic keepalive
- payload is json encoded
getting started
a minimal working example using koa
const Koa = require('koa')
const {SSE, koaMiddleware} = require('einbahn')
const app = new Koa()
const sse = new SSE()
sse.on('connection', client => {
client.send({event: 'welcome', data: 'message from server'})
})
app.use(koaMiddleware(sse))
app.use((ctx, next) => {
ctx.body = `<html><meta charset='utf8'/><script>
let es = new EventSource('/')
es.addEventListener('welcome', ({ data }) => {
alert(JSON.parse(data))
})
</script></html>`
})
app.listen(3000, err => console.log(err ? err : 'listen on http://localhost:3000'))
namespaces
by default all client are connected to the /
namespace:
new EventSource('/')
to connect to a specific namespace:
new EventSource('/namespace1')
server side code
const ns1 = sse.of('/namespace1')
// send event to all client within the namespace
ns1.send({event: 'time', data: new Date()})
channels(rooms)
a namespace can have multiple channels, to join client to a channel:
sse.on('connection', (client, lastId, query) => {
client.join('chan1')
sse.to('chan1').send({data: new Date()})
})