npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

thuck

v0.1.0

Published

A super simple protocol that concats crushed chunks emit by a TCP socket.

Downloads

7

Readme

thuck

Build Status Coverage Status Dependency Status NPM version

NPM

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.