https://github.com/zweifisch/einbahn
Server-Sent Events with Namespaces and Channels
https://github.com/zweifisch/einbahn
sse
Last synced: about 2 months ago
JSON representation
Server-Sent Events with Namespaces and Channels
- Host: GitHub
- URL: https://github.com/zweifisch/einbahn
- Owner: zweifisch
- Created: 2018-10-09T13:42:07.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2018-10-09T14:04:26.000Z (over 6 years ago)
- Last Synced: 2025-03-01T11:07:59.433Z (3 months ago)
- Topics: sse
- Language: TypeScript
- Size: 390 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# einbahn
[![NPM Version][npm-image]][npm-url]
[![Build Status][travis-image]][travis-url]
[![Node.js Version][node-version-image]][node-version-url]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
``` js
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 = `
let es = new EventSource('/')
es.addEventListener('welcome', ({ data }) => {
alert(JSON.parse(data))
})
`
})
app.listen(3000, err => console.log(err ? err : 'listen on http://localhost:3000'))
```### namespaces
by default all client are connected to the `/` namespace:
``` js
new EventSource('/')
```to connect to a specific namespace:
``` js
new EventSource('/namespace1')
```server side code
``` js
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:
``` js
sse.on('connection', (client, lastId, query) => {
client.join('chan1')
sse.to('chan1').send({data: new Date()})
})
```[documentation](https://zweifisch.github.io/einbahn/)
[npm-image]: https://img.shields.io/npm/v/einbahn.svg?style=flat
[npm-url]: https://npmjs.org/package/einbahn
[travis-image]: https://img.shields.io/travis/zweifisch/einbahn.svg?style=flat
[travis-url]: https://travis-ci.org/zweifisch/einbahn
[node-version-image]: https://img.shields.io/node/v/einbahn.svg
[node-version-url]: https://nodejs.org/en/download/