xbroker

Simple web-socket server that connects any web browser to microservices like KV store, mongo, redis

Usage no npm install needed!

<script type="module">
  import xbroker from 'https://cdn.skypack.dev/xbroker';
</script>

README

XBroker">

npm version jest dependencies devDependencies License: MIT

Simple web-socket middleware that connects any web browser to microservices like kv store, mongo, redis, etc. All the messages exchanged between the web browser and the web-socket server are in JSON format.

Installation

npm install xbroker

Usage

$ npx xbroker -h
usage: xbroker [options]

options:
  -p --port    web-socket server port [3500]
  -a --auth    redis authorization string
  -b --batchMs batch building interval in ms [100]
  -s --silent  suppress log messages from output
  -U --utc     use UTC time format in log messages
  -d --debug   print debug messages
  -v --verbose print more detailed messages

  -h --help    print this list and exit

Example

Start a websocket server:

$ npx xbroker
Starting up xbroker, serving port 3500
Hit CTRL-C to stop the server

Start a websocket server when redis requires authentication:

$ npx xbroker -a password
Starting up xbroker, serving port 3500
Hit CTRL-C to stop the server

Open a console in a browser and create a client socket:

var socket = new WebSocket("ws://localhost:3500");

socket.onopen = function(event) {
    console.log("Connected to: " + event.currentTarget.url);
};

socket.onerror = function(error) {
    console.log("Websocket error: " + error);
};

socket.onmessage = function(event) {
    console.log(JSON.stringify(JSON.parse(event.data), undefined, 4));
};

socket.onclose = function(error) {
    console.log("Disconnected from websocket");
};

Send the command "KEYS *" in a JSON format to Redis:

socket.send('{"tag": "1", "cmd": "keys", "args": ["*"]}')

{
    "tag": "1",
    "status": "ok",
    "result": [
        "key1",
        "key2",
        "key3"
    ],
    "command": {"tag": "1", "cmd": "keys", "args": ["*TXN*"]}
}

Development

Setup:

git clone https://github.com/xbroker/xbroker.git
cd xbroker
npm install

Build:

npm run build

Test:

npm test

Lint, Build, Test, and Clean:

npm run all

Update Dependencies:

npm update --save

Testing with Client

The xbroker-client jest suite tries to connect to wss://localhost:3588 You need to start a redis service and a xbroker service on port 3588.

First option is to start a redis service in docker container and xbroker server from the command line:

# Start a redis container
./redis-dev-test/setup.sh
# Build xbroker
npm run all
# Start the xbroker server
npm run start -- -f ./redis-dev-test/xbroker-redis-ssl.conf

Second option is to start both a redis service and a xbroker server in a separate docker stack:

# Start a redis container
./xbroker-dev-test/setup.sh

License

MIT