WebsocketPromisify
A nice-looking this readme version: https://houd1ni.github.io/WebsocketPromisify/
Makes websocket's API just like REST with Promise-like API, with native Promises.
Has a lot of yummies and very lightweight (less than 3kb in gzip)!
// If you detected some bug, want some stuff to be added, feel free to open an issue!
Large data support (chunking), plugins, streams and different server-side implementations are coming.
To see a Node.js server-side part example, please, take a look on test/mock in github repo.
Makes a Promise-like WebSocket connection.
Features (almost all are tunable via constructor config below.)
- Async/await ready.
- ES-module and commonjs built-in.
- Types (d.ts) included.
- Automatically reconnects.
- Supports existent native WebSocket or ws-like implementation (ws npm package) via
socket
property. - And provide your own socket instance via socket config prop.
- Any id and data keys to negotiate with your back-end.
- Any (serialiser)/Decoder(deserialiser).
- Lazy connect: connects only if something sent, then send all of them!
- Supports middleware-adapter. E.g. you can use 'ws' package in Node!
- Custom easy .on method with or without condition: analog to .addEventListener.
- Can log messages/frames/response time into console or wherever you want to. (Hello, firefox 57+!)
- Any protocols field.
- Rejects if sent into closed socket or after some timeout without response.
- If something sent before connection is estabilished, it sends when it's ready.
How it on Server Side ?
1. Serialized JSON is sent by this lib = {id: 'generated_id', data: your data}
... or some entity from your .encode function(message_id, message_data)
2. Some Server processing...
3. Serialized JSON is sent back by the Server = {id: 'the same generated_id', data: feedback data}
... or some entity that could be parsed by your .decode function(raw_data)
Default constructor config is
{
data_type: 'json',
log: ((event, time, message) => null),
timer: false,
url: 'localhost',
timeout: 1400,
reconnect: 2,
lazy: false,
socket: null,
adapter: ((host, protocols) => new WebSocket(host, protocols)),
encode: (message_id, message_data, config) => data,
decode: (raw_message) => { message_id, message_data },
protocols: [],
server: {
id_key: 'id',
data_key: 'data'
}
}
Fields/Props:
socket
Methods:
ready()
send(message),
on(event_name, handler, predicate = (WebSocketEvent) => true),
close()
Example:
import WSP from 'wspromisify'
const somehost = 'example.com:8080'
const someFunction = async () => {
const ws = new WSP({
url: `${somehost}/ws`,
timeout: 2e3,
timer: true,
log(event, time, message = '') {
if(time !== null) {
console.log(event, `in ${time}ms`, message)
} else {
console.log(event, message)
}
}
})
try {
const data = await ws.send({catSaid: 'Meow!'})
console.log({data})
} catch(error) {
console.error('Cannot send a message due to ', error)
}
}
someFunction()