Protocol compliant web socket server with some awesome extras.
Master build: [![Master branch build status][travis-master]][travis]
Wesley is a protocol compliant web socket server with some awesome extras.
$ npm install wesley
var server = require'wesley'listen3000;serveron'connection'// Relay data to all clients on the serverclienton'data'serverwritedata;;;
Sometimes it's necessary to maintain logical pools of clients (AKA namespaces, rooms, topics, etc).
var server = require'wesley'listen3000;serveron'connection'// Relay data to the current pool of clientsclienton'data'poolwritedata;;;
The default pooling strategy separates clients based on the path they connect to.
ws://localhost:3000/ # Server and / eventsws://localhost:3000/pool # Server and /pool eventsws://localhost:3000/pool/child # Server and /pool/child events
This behavoiur can be overridden by passing in your own handler. The callback expects to be called with the name of the pool to join.
varcallback'pool-name';;var server = require'wesley'listen3000poolpooling;serveron'connection'// Handle the clientclientwrite'You\'ve just joined the ' + poolname + ' pool.';;
By default, a Wesley client will emit
data for every message sent from the client.
You can entirely replace this behaviour at your leisure.
varemit'message' data;;var server = require'wesley'listen3000ininbound;serveron'connection'clienton'message'// Handle the message;;
This also means you could handle more complicated messages than simple strings.
varvar data = JSONparsejson;emit'data' data;;var server = require'wesley'listen3000ininbound;serveron'connection'clienton'data'// Handle the data;;
Wesley clients inherit from [EventEmitter2][event-emitter], so even more complex events can be listened to.
varvar data = JSONparsejson;emit'client' datatype data;;var server = require'wesley'listen3000ininbound;serveron'connection'clienton'client' 'message'// Handle data with `data.type === message`;clienton'client' '*'// Handle all client data;;
In much the same way as handling inbound messages, you can also handle outbound messages.
varvar packed = JSONstringifytype:type body:message;emitpacked;;var server = require'wesley'listen3000outoutbound;serveron'connection'// Send data to the clientclientwrite'message' 'Derp.';;
As Wesley is a web socket server, it uses a socket transport by default.
You can create custom transports by extending
It is the job of the transport to proxy events listened to by the client
or server. Please see the documentation for more detail (Coming soon).
Once you have a client, using it is simple.
var wesley = require'wesley';var server =// An array of transports;serveron'connection'// Client wraps the the transport the connection came throughclientwrite'Derp.';;
I can tell you're super excited to start working on your web socket server. One thing you may find useful is a client to start interacting with. This command line client will hopefully give you what you need to get started.
$ wesley --helpUsage: wesley [options]Options:-h, --help output usage information-V, --version output the version number-u, --uri <string> host address-p, --protocol <integer> web socket protocolDefault:wesley --uri ws://localhost:3000 --protocol 13
I accept contributions to the source via Pull Request, but passing unit tests must be included before it will be considered for merge.
$ make install$ make tests
If you have [Vagrant][vagrant] installed, you can build our dev environment to assist development.
The repository will be mounted in
$ vagrant up$ vagrant ssh$ cd /srv
The content of this library is released under the MIT License by Andrew Lawson.
You can find a copy of this license at http://www.opensource.org/licenses/mit