npm

@caaalabash/node-sse

0.0.9 • Public • Published

Server-sent Events

A NodeJS wrapper for Server-sent events

INSTALL

npm install @caaalabash/node-sse -S
const SSE = require('@caaalabash/node-sse')

new SSE(options)

API

new SSE(options)

This will create an SSE instance.

  • Properties:

    • uid: used for defining an unique conversation.
    • stream: event stream, send to client directly.
    • transformStream: extra stream, process by processChunk function then send to stream.
  • Options:

    • setHeaderFunc - How to write response headers? This is relate to framework.
    • [genId] - How to generate sse conversation uuid? By default, it's uuid/v4.
    • [processChunk] - How to transform chunkData to sse stream? By default, just .toString().
    • [heartBeatInterval] - Keep alive milliseconds, by default, it's 5000 ms.
    • [retryTime] - Reconnect SSE interval, by default, it's 5000 ms.
    • [lastEventId] - Set messageId init value, by default, it's 0.
    • [connectEventName] - Connect event name, by default, it's sse-connect.
    • [transformEventName] - Event name for transformStream.on('data').
    • [withMessageId]- send message with message id, by default, it's true, increase from 0.
  • Methods:

    • send(event, payload): Send custom event to client, support string/object.
    • sendFromStream(readableStream): Send stream to transformStream.
    • static getInstance(uid): Get instance by uid.

EXAMPLE

server

const fs = require('fs')
const path = require('path')
const SSE = require('node-sse')

module.exports = {
  /**
   * Connect with client, client will receive `sse-connect` event with payload uid
   */
  async startConnection(ctx) {
    const sse = new SSE({
      setHeaderFunc: ctx.set.bind(ctx),
      processChunkFunc: chunk => JSON.stringify({ result: chunk.toString() })
    })
    ctx.body = sse.stream
  },
  /**
   * Send file through SSE
   */
  async getLogData(ctx) {
    const { uid } = ctx.query

    const sseInstance = SSE.getInstance(uid)
    if (sseInstance) {
      sseInstance.send('reset-log', '')
      sseInstance.sendFromStream(fs.createReadStream('test.log', { highWaterMark: 1024 * 6, encoding: 'utf8' }))
    }

    return ctx.status = 200
  }
}

client

startConnect() {
  const eventSource = new EventSource('/api/sse/connect')
  // receive uid  
  eventSource.addEventListener('sse-connect', e => {
    this.uid = e.data
  })
  // receive log data
  eventSource.addEventListener('sse-data', e => {
    this.originData += JSON.parse(e.data).result
  })

  eventSource.addEventListener('reset-log', e => {
    this.originData = ''
  })
},

Readme

Keywords

Package Sidebar

Install

npm i @caaalabash/node-sse

Weekly Downloads

1

Version

0.0.9

License

ISC

Unpacked Size

9.77 kB

Total Files

6

Last publish

Collaborators

  • caaalabash