thuck
v0.1.0
Published
A super simple protocol that concats crushed chunks emit by a TCP socket.
Downloads
3
Readme
thuck
A super simple protocol that concats crushed chunks emit by a TCP socket.
Installation
npm install thuck
Purpose
The original purpose of this project is that, when we send a bigger data via TCP sockets, the data is crushed by the underlying system into small pieces.
For example, once you "emit" 17KB of data on one side, the other side of the socket may triggers "data" serval times with 1KB chunks each. Then you may need to implement an algorithm to collect these pieces and concat them...
This project do this for you. The only thing you need to do is, send a byte of "flag" (which is defined by you and declare the beginning of the data) and four bytes (a integer) of the length.
Usage
Say you have a "client", in Java:
public void write(byte[] buffer) throws IOException {
this.outStream.write(header(0xff, buffer.length))
this.outStream.write(buffer)
this.outStream.flush()
}
private static byte[] header(int flag, int length) {
return new byte[] {
(byte) flag,
(byte) ((length & 0xff)),
(byte) ((length >> 8) & 0xff),
(byte) ((length >> 16) & 0xff),
(byte) ((length >>> 24))
};
}
Then on the "server" side, in JavaScript:
var tcp = require('net')
, thuck = require('thuck')
tcp.createServer(function (socket) {
var incoming = socket.pipe(thuck(0xff))
incoming.on('data', function (data) {
// ...
})
}).listen(7777)
Shortcoming
The project is not perfect. It just fit my need well but some edge cases have not been considered yet:
- If those 5 bytes of header is crushed?
- If the session is not begins with a packet that starts with that 5-byte-header?
- Packet longer than 4294967295 bytes?
Please let me know your solution!
Test
npm test
License
This project is released under the terms of MIT License.