https://github.com/lamualfa/fastify-se
Plugin for fastify server events. https://www.fastify.io/
https://github.com/lamualfa/fastify-se
Last synced: 4 months ago
JSON representation
Plugin for fastify server events. https://www.fastify.io/
- Host: GitHub
- URL: https://github.com/lamualfa/fastify-se
- Owner: lamualfa
- Created: 2019-08-16T08:59:31.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2023-07-11T01:08:18.000Z (about 3 years ago)
- Last Synced: 2025-02-14T16:51:56.632Z (over 1 year ago)
- Language: JavaScript
- Size: 34.2 KB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 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
```javascript
const fastify_se = require("fastify-se");
const SE = new fastify_se.SE(opts);
fastify.register(SE.plugin);
```
### OPTIONS
```javascript
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 a `seid` (**S**erver **e**vent **ID**) for object key to store `reply` in `clients` object, `clients[seid]= reply;`.
- `stream` : Stream class will be passing to `reply.send(stream)`.
- `streamOptions` : Options for create new stream, `new stream(streamOptions)`.
- `autoGenerateId` : If `true`. The library will automatically create `id` in every `sendEvent`.
- `serverTimeout` : Set timeout for incoming messages, default `120000ms` or equal to `2s`, in `ms`.
- `clients` : All active `reply` will be store in this object with `seid` as a key. The `reply` will deleted after connection closed.
### METHODS
- **`reply.sendEvent(data, ?event, ?id, ?retry)` :**
- `data` : Data will send to client, `string` or `object`.
- `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` : **S**erver **e**vent **ID**, you can get it on `req.seid` in every `http.get` request.
- **`reply.endEvent()` :** To close the connection and delete `reply` value in `clients` object with key same as `req.seid` value.
You can see more information about `data`, `event`, `id` and`retry` in : [Server-sent Events - Fields](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Fields).
### EXAMPLE
```javascript
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");
});
```