https://github.com/pixtron/wss
Simple pub/sub websocket server
https://github.com/pixtron/wss
Last synced: 11 months ago
JSON representation
Simple pub/sub websocket server
- Host: GitHub
- URL: https://github.com/pixtron/wss
- Owner: pixtron
- License: mit
- Created: 2019-09-04T23:26:20.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2021-05-29T14:40:40.000Z (about 5 years ago)
- Last Synced: 2025-06-14T08:40:10.025Z (about 1 year ago)
- Language: JavaScript
- Size: 5.86 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# @pxtrn/wss
A aimple pub/sub websocket server
## Installation
`npm install --save @pxtrn/wss`
## Usage
### Basic example
```js
const Wss = require('@pxtrn/wss');
async function createServer() {
const wss = new Wss({host: '127.0.0.1', port: 8081});
wss.publish('cats');
wss.publish('dogs');
await wss.connect();
return wss;
}
createServer().then(wss => {
let age = 0;
const name = 'kitty';
setInterval(function() {
// broadcasting a cat to the channel "cats"
wss.broadcast({age, name}, 'cats');
age++;
}, 1000);
}).catch(err => {
console.error(err);
});
```
### Subscribe and unsubscribe a client to a channel
A more detailed example client, can be found in the [examples](examples)
```js
const WebSocket = require('ws');
const client = new WebSocket('ws://localhost:8081');
client.on('open', () => {
//subscribe to channel "cats"
client.send(JSON.stringify({op: 'subscribe', channel: 'cats'}));
setTimeout(function() {
client.ping(function(){});
}, 5000);
setTimeout(function() {
//unsubscribe from channel "cats"
client.send(JSON.stringify({op: 'unsubscribe', channel: 'cats'}));
}, 3000);
});
client.on('pong', function() {
console.log('got pong');
});
client.on('message', message => {
console.log('got message', message);
});
```
## API
### Table of Contents
- [Class: Wss](#class-wss)
- [new Wss(config[, logger])](#new-wssconfig-logger)
- [Event: 'close'](#event-close)
- [Event: 'connection'](#event-connection)
- [Event: 'error'](#event-error)
- [Event: 'headers'](#event-headers)
- [Event: 'listening'](#event-listening)
- [async server.connect()](#async-serverconnect)
- [async server.close()](#async-serverclose)
- [server.publish(channel)](#serverpublishchannel)
- [server.broadcast(channel)](#serverbroadcastdata-channel)
### Class: Wss
This class represents a websocket server with simple pub/sub. It extends EventEmitter.
#### new Wss(config[, logger])
- `config` {Object}
[See options for `ws` modules `Class: WebSocket.Server`](https://github.com/websockets/ws/blob/HEAD/doc/ws.md#class-websocketserver)
- `logger` {Object}
custom logger containing the following methods
```js
const logger = {
debug: function(message, data) {}
notice: function(message, data) {}
info: function(message, data) {}
warning: function(message, data) {}
error: function(message, data) {},
}
```
#### Event: 'close'
Emitted when the server closes.
#### Event: 'connection'
- `socket` {WebSocket}
- `request` {http.IncomingMessage}
Emitted when the handshake is complete. `request` is the http GET request sent
by the client. Useful for parsing authority headers, cookie headers, and other
information.
#### Event: 'error'
- `error` {Error}
Emitted when an error occurs on the underlying server.
#### Event: 'headers'
- `headers` {Array}
- `request` {http.IncomingMessage}
Emitted before the response headers are written to the socket as part of the
handshake. This allows you to inspect/modify the headers before they are sent.
#### Event: 'listening'
Emitted when the underlying server has been bound.
#### async server.connect()
Connect the server
#### async server.close()
Close the server
#### server.publish(channel)
- `channel` {String}
Publish a new `channel`. The same channel can only be published once
#### server.broadcast(data[, channel])
- `data` {Object |Array}
- `channel` {String}
Broadcast `data` to all clients in `channel`. If `channel` is undefined,
`data` will be broadcastet to all connected clients.