Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Simple Websocket wrapper that provides request/response functionality

License

Notifications You must be signed in to change notification settings

miratronix/rapport

Repository files navigation

NPM

A simple websocket wrapper that adds request/response functionality.

Features

  • Callback and Promise support for requests
  • Wraps node WS objects as well as the browser Websocket object
  • Small footprint (7.4kb minified)
  • Configurable promise implementation
  • Configurable serialization functions
  • Zero dependencies

Browser Usage

Simply add rapport.min.js to your HTML page and start using it:

const Rapport = Rapport(Websocket);
const ws = Rapport.create('ws:localhost', wsOptions);
ws.onOpen(() => {
 
 // If the browser supports ES6 promises or a promise library is configured
 ws.request('some request', timeout)
 .then((response) => {})
 .catch((err) => {});
 
 // If you prefer callbacks
 ws.request('some request', timeout, (response, error) => {});
});
// Replying to a request
ws.onMessage((msg, ws) => {
 
 // The message content is in the body
 const content = msg.body;
 
 if (msg.isRequest) {
 ws.respond('hello');
 ws.respondWithError('Error!');
 }
});
// Closes are resolved when onClose is called, with an optional timeout
ws.close(optionalMessage, optionalWsCode, optionalTimeout)
 .then()
 .catch();
// Other functions are also wrapped:
ws.onError((err) => {});
ws.onClose((msg, code) => {});
ws.send(message);

Node.js Usage

Install with npm install --save rapport.

Requesting from clients with an existing socket

const Rapport = require('rapport')();
const wrappedSocket = Rapport.wrap(existingSocket);
wrappedSocket.request('some request', timeout)
 .then((response) => {})
 .catch((err) => {});
 
wrappedSocket.request('some request', timeout, (response, error) => {});

Responding to clients with an existing socket

const Rapport = require('rapport')();
const wrappedSocket = Rapport.wrap(existingSocket);
wrappedSocket.onMessage((msg, ws) => {
 
 // The message content is in the body
 const content = msg.body;
 
 if (msg.isRequest) { 
 ws.respond('Hello');
 ws.respondWithError('Error!');
 }
});

Creating a new client

const Rapport = require('rapport')(require('ws'));
const ws = Rapport.create('ws:localhost', wsOptions);
ws.onOpen(() => { 
 ws.request('some request', timeout)
 .then((response) => {})
 .catch((err) => {});
});
// Replying to a request
ws.onMessage((msg, ws) => {
 
 // The message content is in the body
 const content = msg.body;
 
 if (msg.isRequest) {
 ws.respond('hello');
 ws.respondWithError('Error!');
 }
});
// Closes are resolved when onClose is called, with an optional timeout
ws.close(optionalMessage, optionalWsCode, optionalTimeout)
 .then()
 .catch();
// Other functions are also wrapped:
ws.onError((err) => {});
ws.onClose((msg, code) => {});
ws.send(message);

Configuration Options

There are 6 configurable options for the Rapport library, with the following defaults:

Rapport(Websocket, {
 
 // Set the function for encoding messages
 encodeMessage: (msg) => { return JSON.stringify(msg); },
 
 // Set the function for decoding messages
 decodeMessage: (msg) => { return JSON.parse(msg); },
 
 // Set the function for encoding close messages. This MUST return a string.
 encodeCloseMessage: (msg) => { return JSON.stringify(msg); },
 
 // Set the function for decoding messages. This will always receive a string.
 decodeCloseMessage: (msg) => { return JSON.parse(msg); },
 
 // Set the Promise implementation to use. Set to false to turn off promises.
 Promise: Promise,
 
 // Set the request ID generation function
 generateRequestId: () => { return uuid.v4(); }
});

About

Simple Websocket wrapper that provides request/response functionality

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /