uWebSockets.js/examples/PubSub.js
2020-06-05 17:09:19 +02:00

58 lines
1.8 KiB
JavaScript
Vendored

/* Simple pub/sub example (WIP) */
const uWS = require('../dist/uws.js');
const port = 9001;
const app = uWS./*SSL*/App({
key_file_name: 'misc/key.pem',
cert_file_name: 'misc/cert.pem',
passphrase: '1234'
}).ws('/*', {
/* Options */
compression: uWS.SHARED_COMPRESSOR,
maxPayloadLength: 16 * 1024 * 1024,
idleTimeout: 10,
maxBackpressure: 1024,
/* Todo, Setting 1: merge messages in one, or keep them as separate WebSocket frames - mergePublishedMessages */
/* Todo, Setting 4: send to all including us, or not? That's not a setting really just use ws.publish or global uWS.publish */
/* Handlers */
open: (ws) => {
/* Let this client listen to all sensor topics */
ws.subscribe('home/sensors/#');
},
message: (ws, message, isBinary) => {
/* Parse this message according to some application
* protocol such as JSON [action, topic, message] */
/* Let's pretend this was a temperature message
* [pub, home/sensors/temperature, message] */
ws.publish('home/sensors/temperature', message);
/* Let's also pretend this was a light message
* [pub, home/sensors/light, message] */
ws.publish('home/sensors/light', message);
/* If you have good imagination you can also
* pretend some message was a subscription
* like so: [sub, /home/sensors/humidity].
* I hope you get how any application protocol
* can be implemented with these helpers. */
},
drain: (ws) => {
},
close: (ws, code, message) => {
/* The library guarantees proper unsubscription at close */
}
}).any('/*', (res, req) => {
res.end('Nothing to see here!');
}).listen(port, (token) => {
if (token) {
console.log('Listening to port ' + port);
} else {
console.log('Failed to listen to port ' + port);
}
});