fastify-se
Fastify plugin for handle Server-sent Events. https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events
INSTALATION
npm i fastify-se
USAGE
const fastify_se = require("fastify-se");
const SE = new fastify_se.SE(opts);
fastify.register(SE.plugin);
OPTIONS
this["seidGenerator"] = opts.seidGenerator || defaultSeidGenerator;
this["stream"] = opts.stream || stream.PassThrough;
this["streamOptions"] = opts.streamOptions || { allowHalfOpen: false };
this["autoGenerateId"] = opts.autoGenerateId || true;
this["serverTimeout"] = opts.serverTimeout || 120000;
this["clients"] = {};
seidGenerator
: Return aseid
(Server event ID) for object key to storereply
inclients
object,clients[seid]= reply;
.stream
: Stream class will be passing toreply.send(stream)
.streamOptions
: Options for create new stream,new stream(streamOptions)
.autoGenerateId
: Iftrue
. The library will automatically createid
in everysendEvent
.serverTimeout
: Set timeout for incoming messages, default120000ms
or equal to2s
, inms
.clients
: All activereply
will be store in this object withseid
as a key. Thereply
will deleted after connection closed.
METHODS
-
reply.sendEvent(data, ?event, ?id, ?retry)
:data
: Data will send to client,string
orobject
.event
(Optional) : Event name will emit in client.id
(Optional) : ID for every event action.retry
(Optional) : Interval time to reconnecting to server if connection lost (In ms).
-
reply.sendEventBySeid(seid, data, ?event, ?id, ?retry)
:seid
: Server event ID, you can get it onreq.seid
in everyhttp.get
request.
-
reply.endEvent()
: To close the connection and deletereply
value inclients
object with key same asreq.seid
value.
You can see more information about data
, event
, id
andretry
in : Server-sent Events - Fields.
EXAMPLE
fastify.get("/events", function(request, reply) {
reply.sendEvent("hello world", "greeting");
// OR data with type object
reply.sendEvent({
data: {
from: "@other_people",
message: "hey guy",
date: "x-x-x-x"
},
event: "new_private_message"
});
// If you want to trigger event for other client
reply.sendEventBySeid(
"@my_friend", // Your custom seid
{
data: {
from: "@my_friend",
message: "my name is x"
},
event: "send_new_message"
}
);
// Important
reply.endEvent();
// reply.sendEvent will throw error if you call it in here
reply.sendEvent("hello world", "greeting");
});