websocket-relay
Version:
Easily set up communication channels between browser clients
134 lines (95 loc) • 3.67 kB
Markdown
# websocket-relay
### Easily set up communication channels between browser clients
#### Great for creating WebRTC signaling servers
On the server:
```javascript
var RelayServer = require('websocket-relay');
var relayServer = new RelayServer({ port: 4000 });
var client1 = relayServer.registerClient();
var client2 = relayServer.registerClient();
console.log(client1.id, client1.token); // => 0 11ac27cd0c17bd1c7ba9aa4285979aea
console.log(client2.id, client2.token); // => 1 7c2e2bc62cb06d7b90651cd4a2f369fb
relayServer.registerRelayChannel(client1.id, client2.id);
```
In the first browser client:
```html
<script type="text/javascript" src="websocket_relay.min.js"></script>
<script type="text/javascript">
var relay = new WebSocketRelay('localhost:4000', {
clientId: 0,
token: '11ac27cd0c17bd1c7ba9aa4285979aea',
});
var channel = relay.createChannel(1);
</script>
```
In the second browser client:
```html
<script type="text/javascript" src="websocket_relay.min.js"></script>
<script type="text/javascript">
var relay = new WebSocketRelay('localhost:4000', {
clientId: 1,
token: '7c2e2bc62cb06d7b90651cd4a2f369fb'
});
var channel = relay.createChannel(0);
</script>
```
Now you can freely send and receive data through the channel to the other browser client:
```html
<script type="text/javascript">
channel.send('hello world');
channel.on('message', function(message) {
console.log(message);
});
</script>
```
# Server
## Class: RelayServer
This class represents a WebSocket relay server. It is an `EventEmitter`.
### new RelayServer(options, [callback])
* `options` Object
* `port` Number
* `authorizeAllChannels` Boolean
* `callback` Function
Construct a new server object.
### options.authorizeAllChannels
Whether to allow relay channels between clients without registration. Default `false`.
### server.close([callback])
Close the server and terminate all clients, calls callback when done with an error if one occured. Must be called after the RelayServer constructor calls its callback.
### Event: 'error'
`function (error) { }`
If the underlying server emits an error, it will be forwarded here. If there is no listener, it will throw the error.
# Client
## Class: WebSocketRelay
This class represents a connection to a WebSocket relay server. It is an `EventEmitter`.
### new WebSocketRelay(address, authentication, [callback])
* `address` String
* `authentication` Object
* `clientId` Number
* `token` String
* `callback` Function
`address` is the host and port of the relay server. When it connects with the relay server `callback` is called.
### authentication.clientId
ID of the client returned from registration on the server.
### authentication.token
Client's authentication token.
### relay.createChannel(targetClientId)
* `targetClientId` Number
Returns an instance of `RelayChannel` that represents a bidirectional channel with the target client.
## Class: RelayChannel
Represents a bidirectional channel with a target client. It is an `EventEmitter`.
### channel.send(message)
* `message` String
Sends the message to other client. If the other client has not connected the relay server yet, the message will be queued. Only string messages are supported.
### channel.emitQueuedMessages()
Emits each queued message (the messages were received before the channel was created).
### Event: 'message'
`function (message) { }`
The client received a relay message
### Event: 'open'
`function () { }`
The client formed a connection with the relay server (`channel.send()` can be called).
# Testing
`npm test`
Try upgrading node if you receive syntax errors.
### Compiling Client Code
`npm compile`