expose html5 server sent events (sse) as a writable stream
Switch branches/tags
Clone or download
Latest commit bfd485c Oct 28, 2016
Permalink
Failed to load latest commit information.
lib fix: cast to string before splitting data Aug 3, 2016
test add tests Nov 17, 2012
README.md Add README Nov 17, 2012
browser.js add browser version Sep 25, 2013
index.js code commit Nov 17, 2012
package.json 0.0.5 Oct 28, 2016

README.md

sse-stream

Expose HTML5 Server Sent Events as an installable appliance on Node.JS http servers; connections are emitted as Writable streams.

var http = require('http')
  , fs = require('fs')
  , through = require('through')
  , sse = require('sse-stream')('/sse')
  , serv

module.exports = serv = http.createServer(function(req, resp) {
  resp.setHeader('content-type', 'text/html')
  resp.end('<html><body><script type="text/javascript">('+js+')()</script></body></html>')
})

sse.install(serv)

sse.on('connection', function(client) {
  fs.createReadStream('/usr/share/dict/words')
    .pipe(through(function(buf) { this.emit('data', buf.toString()) }))
    .pipe(client)
})

// client-side code:
function js() {
  var es = new EventSource('/sse')
    , pre = document.createElement('pre')
    , closed = false

  document.body.appendChild(pre)

  es.onmessage = function(ev) {
    if(closed) return

    pre.appendChild(document.createTextNode(ev.data))

    window.scrollTo(0, pre.clientHeight)
  }

  es.addEventListener('end', function() {
    es.close()
    closed = true
  }, true)

  es.onerror = function(e) {
    closed = true
  }
}

API

sse = require('sse-stream')(path | options)

Create a SSE server that emits connection events on new, successful eventstream connections.

The argument may either be a string path to listen on (defaults to /sse/) or an object:

{ path: '/listen/on/this/path'
, keepalive: 1000 }

keepalive determines the interval time in ms that keepalives will be sent to all connected clients.

sse.on('connection', function(client))

client is a writable stream representing a client connection (request response pair).

Of note, all data sent through this connection will be stringified before sending due to the event stream spec.

client.retry(integer ms)

Send a "retry" message that lets the client know how many MS to wait until retrying a connection that ended.

license

MIT