෴ browserver-node ෴
This is a browserver proxy for node.js.
Use browserver-node to create servers that act as a two-way proxies between an HTTP server and a WebSocket server, by
- forwarding incoming HTTP requests on to WebSocket connected clients, and back.
- forwarding incoming WebSocket messages to other HTTP servers, and back.
This library, along with browserver-client, is all the code you need to set up your own browserver.
Example
// http, websocket, and browserversvar http = var engine = var brow = { // your usual HTTP server logic} // instantiate http and websocket serversvar httpServer = httpvar wsServer = engine // pass each to a new browserver...var browServer = http: httpServer ws: wsServer host: "*.mydomain.org" // ... and start listening!httpServer
Installation
browserver is available through npm.
npm install brow
API
browserver = new brow.Server(options)
This joins a WebSocket server and HTTP server, returning a new browserver instance. The options
argument accepts the following properties:
-
ws
: Required. Must be an instance of a WebSocket server (such as ws) or compatible shim (such as socket.io, engine.io) that emits socket instances throughconnection
events. -
http
: Optional. If specified, must be an instance ofhttp.Server
. If omitted, an instance will be instantiated and bound to port3572
(the Unicode codepoint for the brow෴
). -
host
Optional. If specified, must be a string containing one and only one asterisk (*
), which is replaced with a socket id when a WebSocket connection is established. Note that this means you will need a wildcard CNAME or A record in your DNS settings that resolves to the appropriate domain or IP address. If omitted, CloudFoundry's *.vcap.me domain is used, which resolves all domains/subdomains to127.0.0.1
.
browserver.on("connection", function(client){ ... })
The browserver server emits a connection
event with a WebSocket-connected browserver client, whenever one connects. Each client is an instance of brow.Client
, with an id
property that defaults to a random lowercase alphanumeric string generated upon instantiation. How these ids are generated can be customized by overriding the static brow.Client.id
method.
client.on("close", function(){ ... })
browserver clients emit a close
event when their underlying WebSocket is closed.
TODO
- Add integrated hooks for authorization and authentication of requests, both incoming and outgoing.