Need help with rethinkdb-websocket-client?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

mikemintz
137 Stars 30 Forks MIT License 69 Commits 8 Opened issues

Description

RethinkDB driver monkey-patched to connect via WebSocket. Works in browser.

Services available

!
?

Need anything else?

Contributors list

# 181,997
CSS
Shell
kafka-s...
kafka
51 commits
# 348,925
C
CSS
Shell
1 commit
# 3,415
TypeScr...
hashids
standar...
faceboo...
1 commit
# 49,965
React
Haskell
MATLAB
faceboo...
1 commit
# 396,567
TypeScr...
algebra...
HTML
functio...
1 commit

npm version Travis

rethinkdb-websocket-client

RethinkDB JavaScript driver monkey-patched to connect via WebSocket. Works in browser, Electron and Node.JS environments.

What is this?

This library wraps the official JavaScript RethinkDB driver, monkey-patching the node.js net module so that it connects over WebSocket. Other than calling

RethinkdbWebsocketClient.connect
instead of
rethinkdb.connect
, the API is identical. And other than the HTTP upgrade request at the start, the protocol over the wire is unchanged.

Since RethinkDB does not accept WebSocket connections, you will have to use a proxy on the server that accepts WebSocket connects and proxies them to the RethinkDB TCP port: * websockify is a server that listens for incoming WebSocket connections, and blindly forwards traffic in both directions to a specified TCP address. To set up a websockify server at that forwards WebSocket port 8015 to RethinkDB running locally on port 28015, run

./run localhost:8015 localhost:28015
* rethinkdb-websocket-server is a node.js server library that functions similarly to websockify. However, it parses incoming RethinkDB queries from browser clients and runs them through custom validation before forwarding the query to the RethinkDB server.

How do I use this?

This package should be installed with npm. You probably want to use something like webpack or browserify to include it in your web application. In theory it will also run on node.js, but I have not yet tested that.

Here is a simple example of how to use it:

var RethinkdbWebsocketClient = require('rethinkdb-websocket-client');
var r = RethinkdbWebsocketClient.rethinkdb;

// In case you want bluebird, which is bundled with the rethinkdb driver var Promise = RethinkdbWebsocketClient.Promise;

var options = { host: 'localhost', // hostname of the websocket server port: 8015, // port number of the websocket server path: '/', // HTTP path to websocket route wsProtocols: ['binary'], // sub-protocols for websocket, required for websockify wsBinary: 'arraybuffer', // specify which binary type should be used for WS (optional) secure: false, // set true to use secure TLS websockets db: 'test', // default database, passed to rethinkdb.connect simulatedLatencyMs: 100, // wait 100ms before sending each message (optional) };

RethinkdbWebsocketClient.connect(options).then(function(conn) { var query = r.table('turtles'); query.run(conn, function(err, cursor) { cursor.toArray(function(err, results) { console.log(results); }); }); });

Other environments

React

For React integration, see the react-rethinkdb library.

Node.JS and Electron

To use inside Electron or on the server in Node.JS (as opposed to the browser), use the following path when importing the module:

js
var RethinkdbWebsocketClient = require('rethinkdb-websocket-client/dist/node');

If you need to route the WebSocket through a proxy server you can provide your own

agent
via the
wsProtocols
configuration parameter, e.g.:
var Socks = require('socks');
var options = {
  host: 'localhost',       // hostname of the websocket server
  port: 8015,              // port number of the websocket server
  path: '/',               // HTTP path to websocket route
  wsProtocols: {
    agent: new Socks.Agent({
      proxy: { ipaddress: '127.0.0.1', port: 8080, type: 5 }
    })
  },
  secure: false,           // set true to use secure TLS websockets
  db: 'test',              // default database, passed to rethinkdb.connect
  simulatedLatencyMs: 100, // wait 100ms before sending each message (optional)
};

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.