Skip to content

waylaidwanderer/fastify-sse-v2

 
 

Repository files navigation

Fastify SSE Plugin

CI check npm version

Fastify plugin for sending Server-sent events.

For fastify@2.x use fastify-sse-v2@1.x!

How to use?

yarn add fastify-sse-v2

Register fastify-sse-v2 plugin into your fastify instance:

import {FastifySSEPlugin} from "fastify-sse-v2";

const server = fastify();
server.register(FastifySSEPlugin);

Sending events from AsyncIterable source

import {FastifySSEPlugin} from "fastify-sse-v2";

const server = fastify();
server.register(FastifySSEPlugin);

server.get("/", function (req, res) {
    res.sse((async function * source () {
          for (let i = 0; i < 10; i++) {
            sleep(2000);
            yield {id: String(i), data: "Some message"};
          }
    })());
});

Sending individual events

import {FastifySSEPlugin} from "fastify-sse-v2";

const server = fastify();
server.register(FastifySSEPlugin);

server.get("/", async function (req, res) {
    for (let i = 0; i < 10; i++) {
      await sleep(2000);
      res.sse({id: String(i), data: "Some message"});
    }
});

fastify.get('/listenForChanges', {}, (request, reply) => {
    const listenStream = fastify.db.watch('doc-uuid')
        .on('data', (data)=>reply.sse({ data: JSON.stringify(data) }))
        .on('delete', () => reply.sse({ event: 'close' }))
    request.socket.on('close', ()=>listenStream.end())
})
Sending events from EventEmmiters
import {FastifySSEPlugin} from "fastify-sse-v2";
import {on} from "events";

const server = fastify();
server.register(FastifySSEPlugin);

server.get("/", function (req, res) {
    res.sse(
  (async function* () {
    for await (const [event] of on(eventEmmitter, "update")) {
      yield {
        type: event.name,
        data: JSON.stringify(event),
      };
    }
  })()
);
});
Note
  • to remove event listeners (or some other cleanup) when client closes connection, you can listen on connection closing event: request.socket.on('close', () => abortController.abort());

About

Provide Server-Sent Events to Fastify

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 99.0%
  • JavaScript 1.0%
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy