Giter Site home page Giter Site logo

loudou / rethinkdb-websocket-client Goto Github PK

View Code? Open in Web Editor NEW

This project forked from mikemintz/rethinkdb-websocket-client

0.0 1.0 0.0 40 KB

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

License: MIT License

JavaScript 100.00%

rethinkdb-websocket-client's Introduction

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
  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:

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)
};

rethinkdb-websocket-client's People

Contributors

mikemintz avatar babakness avatar niieani avatar gutenye avatar

Watchers

LouDou avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.