ws-multi-proxy
v0.2.0
Published
Many to many WebSocket proxy server with pluggable routing logic. e.g. Take a bunch of existing WebSocket servers that only accept a single client connection and allow it to be used with multiple clients at once.
Downloads
2
Readme
ws-multi-proxy
Many to many WebSocket proxy server
There are some WebSocket servers that only support a single connected client at a time.
You may want to connect multiple clients to that same server.
This lets you do that.
Usage
- Setup a proxy server
var proxy = new WebSocketProxy({ debug:true, webSocketServer:{ port:1234 } })
- Open
http://www.websocket.org/echo.html
in your browser - Try it out using
ws://localhost:1234/proxy/ws://echo.websocket.org
Advanced Usage
ws-multi-proxy is pretty simple wrapper around the ws
module's WebSocketServer
.
WebSocket connections are just http GET requests sent with some special headers. So, in order to accept WebSocket connections, we need an http server. The WebSocketServer
can create one for you or use an existing http server instance if you have one.
Create a new http server
Or using an existing server instance you have lying around
var httpServer = require('http').createServer().listen(1234)
Create a WebSocketServer
config
Tell it which server to use
var wssConfig = { server:httpServer }
Create a WebSocketProxy
Tell it which WebSocketServer config to use
var proxy = new WebSocketProxy({ webSocketServer:wssConfig })
Customize the routing logic
By default the mutateDataFrom*
methods handle multiple clients by namespacing the message id. You can modify this logic to do whatever you want.
proxy.mutateDataFromServer =
proxy.mutateDataFromClient = function(data, sender, receiver){
// perform some sort of custom message validation
if (data.myCustomToken != receiver.myCustomToken)
return false // don't sent message
// or maybe augment the message before it is received
data.value += " lol, augmented value"
return data
}
Or keep the existing functionality by monkeypatching.
var oldMutateDataFromClient = proxy.mutateDataFromClient
proxy.mutateDataFromClient = function(data, sender, receiver){
// some sort of custom message validation
if (data.myCustomToken != receiver.myCustomToken)
return false // don't sent message
return oldMutateDataFromClient.call(this, data, sender, receiver)
}