fast-tcp
fast-tcp is an extremely fast TCP client and server that allows to emit and listen to events. It also provides more features like binary streaming, acknowledgements, broadcasts, rooms, etc.
In order to get the maximum performance, every data type is sent using the fastest way to write it into the underline Buffer. Integer numbers are sent as signed integers of 48 bits, decimal numbers as double of 64 bits, boolean as byte, strings as utf8 string, buffers as binary, objects are serialized as binary and streams are transmitted in binary over the fast-tcp protocol.
To be flexible sending objects, by default, they are serialized/deserialized using JSON.stringify/JSON.parse so, sending a Javascript object is possible out of the box. It is also possible to override the objects serialization so, you can use third-party libraries like Protocol Buffer, avro, MessagePack or even your own implementation.
Install
npm install fast-tcp
Features
- All primitive data types are supported (boolean, string, number, object, buffer)
- Configurable client reconnection
- Callbacks in message and stream reception (acknowledgements)
- Broadcasts, rooms and client to client messages and streams
- Configurable object serializer/deserializer (Protocol Buffer, avro, MessagePack, etc)
- High performance binary streams over fast-tcp protocol
- AS FAST AS LIGHT!
Client Libraries
- fast-tcp-java
- fast-tcp-c - In development
Samples
Simple socket-server
var Server = Server;var Socket = Socket; var server = ;server;server; var socket = host: 'localhost' port: 5000;socket;
Configurable client reconnection
var socket = ... reconnect: true // (true by default) reconnectInterval: 2000 // (1000ms by default);
Callbacks in message and stream reception (acknowledgements)
For messages:
server; // Clientsocket;
For streams:
server; // Clientvar writeStream = socket;fs;
Broadcasts, rooms and client to client messages and streams
From client:
// Join roomsocket; // Leave roomsocket; // Leave all roomssocket; // Broadcast event to everyone, exclude sendersocket; // Broadcast stream to everyone, exclude sendervar writeStream = socket; // Broadcast event to everyone, include sendersocket; // Broadcast event to everyone in room "room_name", exclude sendersocket; // Broadcast stream to everyone in room "room_name", exclude sendervar writeStream = socket; // Broadcast event to everyone in room "room_name", include sendersocket; // Send event to individual "socket_id"socket; // Open stream to individual "socket_id"var writeStream = socket;
To use the socket#id attribute you must wait for the event 'connect'.
From server:
// Join roomserver; // Leave roomserver; // Leave all roomsserver; // Broadcast event to everyoneserver; // Broadcast stream to everyonevar writeStream = server; // Broadcast event to everyone, with exceptionsserver; // Broadcast stream to everyone, with exceptionsvar writeStream = server; // Broadcast event to everyone in room "room_name"server; // Broadcast stream to everyone in room "room_name"var writeStream = server; // Broadcast event to everyone in room "room_name", with exceptionsserver; // Broadcast stream to everyone in room "room_name", with exceptionsvar writeStream = server; // Send event to individual "socket_id"server; // Open stream to individual "socket_id"var writeStream = server;
Configurable object serializer/deserializer
var server = { return User; }; server; // Clientvar socket = ... { return user; }; socket;
High performance binary streams
server; // Clientvar writeStream = socket;fs;
Check out the folder examples/
for more samples.