nossock
v0.0.14
Published
Small lib for implementing lightweight protocols on top of TCP/TLS
Downloads
4
Readme
Nossock
Nossock is a small lib for implementing lightweight protocols on top of TCP & TLS.
- Fast: serializes messages to JSON, but sends Buffer objects as it is with no overhead
- Lower memory consumption: one reusable buffer for parsing incoming messages
- TCP and TLS: easy configurable
Installation
$ npm install nossock
Adding req-res messages and validation
See losin lib that adds extra functionality to nossock.
TCP example
var nossock = require('nossock');
/* create server */
nossock.createServer('tcp', {}, function(socket) {
socket.on('hello', function(body) {
console.log('On server - hello', body);
socket.send('bye', 'cruel world');
});
}).listen(8797);
/* create client */
nossock.createClient('tcp', {port: 8797}, function(socket) {
socket.on('bye', function(body) {
console.log('On client - bye', body);
});
socket.send('hello', 'world');
});
TLS example
var fs = require('fs'),
nossock = require('nossock');
/* create server */
var serverOpts = {
cert: fs.readFileSync('/path/to/server.crt'),
key: fs.readFileSync('/path/to/server.key'),
ca: fs.readFileSync('/path/to/ca.crt'),
passphrase: 'passphrase',
requestCert: true,
rejectUnauthorized: false
};
nossock.createServer('tls', serverOpts, function(socket) {
console.log('Got connection from', socket.socket.remoteAddress);
console.log('Certificate', socket.socket.getPeerCertificate());
socket.on('hello', function(body) {
console.log('On server - hello', body);
socket.send('bye', 'cruel world');
});
}).listen(8797);
/* create client */
var clientOpts = {
host: 'localhost',
port: 8797,
cert: fs.readFileSync('/path/to/client.crt'),
key: fs.readFileSync('/path/to/client.key'),
ca: fs.readFileSync('/path/to/ca.crt'),
passphrase: 'passphrase'
};
nossock.createClient('tls', clientOpts, function(socket) {
socket.on('bye', function(body) {
console.log('On client - bye', body);
});
socket.send('hello', 'world');
});
For more examples, see tests
Message Format
API
nossock.createServer( [type], [options], callback )
Returns:
server
: server instance
Arguments:
type
:'tcp'
(default) |'tls'
options
: options object for underlying tcp or tlscreateServer
functioncallback
: connection listener
nossock.createClient( [type], [options], callback )
Returns:
socket
: Nossock instance
Arguments:
type
:'tcp'
(default) |'tls'
options
: options object for underlying tcp or tlsconnect
functioncallback
: connection listener
Socket (passed to callback)
socket.send(name, obj)
- send message with namename
and objectobj
. obj will be serialized in JSON. If obj is instance of Buffer, it won't be serialized and will be sent as it is, with no extra overhead.socket.on(name, callback)
- subscribe onname
event. Once got,callback
will be called with received object as the only parameter.name
could be anything except of the reserved ones (likeerror
orend
).socket.socket
- underlying socket. Could be used to retreive some useful info such assocket.socket.remoteAddress
' orsocket.socket.getPeerCertificate()
(for TLS connections).
Events forwarded from underlying socket
connect
, end
, timeout
, error
, close
Tests
$ sudo npm install nodeunit -g
$ npm test
Restrictions
Due to message structure, message body size is limited to 4096 Mb
. No idea why
you'll want to send such a big message, in any case it worth to split it to
lots of smaller parts.
Author
Thanks
- Igor Sosyura (help & bugfix)
- Evgeniy Agafonov (original idea)
License
MIT