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 🙏

© 2026 – Pkg Stats / Ryan Hefner

socket-to-me

v1.0.2

Published

WebSocket load testing utility

Readme

Socket To Me

Socket To Me is WebSocket benchmarking/load generator. There are a lot of benchmarking tools for HTTP servers. You've got ab, siege, wrk and more. But all these tools only work with plain ol HTTP and have no support for WebSockets - even if they did they wouldn't be suitable, as they would be testing short running HTTP requests instead of long running HTTP requests with a lot of messaging traffic.

Socket To Me is a forked modification of Thor https://github.com/observing/thor

Dependencies

Socket To Me requires Node.js to be installed on your system. If you don't have Node.js installed you can download it from http://nodejs.org or build it from the github source repository: http://github.com/joyent/node.

Once you have Node.js installed, you can use the bundled package manager npm to install this module:

npm install -g socket-to-me

The -g command flag tells npm to install the module globally on your system.

Usage

sockme [options] <urls>

Socket To Me can hit multiple URL's at once; this is useful if you are testing your reverse proxies, load balancers or just simply multiple applications. The url that you supply to sockme should be written in a WebSocket compatible format using the ws or wss protocols:

sockme --amount 5000 ws://localhost:8080 wss://localhost:8081

The snippet above will open up 5000 connections against the regular ws://localhost:8080 and also 5000 connections against the secured wss://localhost:8081 server, so a total of 10000 connections will be made.

One thing to keep in mind is you probably need to bump the amount of file descriptors on your local machine if you start testing WebSockets. Set the ulimit -n on machine as high as possible. If you do not know how to do this, Google it.

Options

  Usage: sockme [options] ws://localhost

  Options:

    -h, --help                      output usage information
    -D, --duration <duration>       duration in seconds to run
    -p, --payloads <payloads>        comma separated min and max payloads in bytes
    -A, --amount <connections>      the amount of persistent connections to generate
    -C, --concurrent <connections>  how many connections to bring up at a time per url
    -I, --interval <interval>       the interval over which to bring connections up
    -F, --frequency <frequency>     comma separated max and min frequency between messages in ms
    -B, --buffer <size>             size of the messages that are send
    -W, --workers <cpus>            workers to be spawned defaults to num cpus
    -G, --generator <file>          custom message generators
    -P, --protocol <protocol>       name of websocket protocol
    -U, --user <librato-user>       email for librato account
    -T, --token <librato-token>     token for librato account
    -V, --version                   output the version number

Some small notes about the options:

  • --protocol is the string protocol passed to the websocket constructor
  • --payloads will generate random payloads in the given range
  • --buffer should be size of the message in bytes if specified it takes precedent over --payloads
  • --workers as Node.js is single threaded this sets the amount of sub processes to handle all the heavy lifting.
  • --user, --token the librato plugin will send stats a librato account this can be useful if you're running multiple socket-to-me tests at the same time using something like Docker and would like to see stats the user and token can be set as environment variablest to LIBRATO_USER and LIBRATO_TOKEN.

Custom messages

Some WebSocket servers have their own custom messaging protocol. In order to work with those servers we introduced a concept called generators a generator is a small JavaScript file that can output messages. It uses a really simple generator by default.

Checkout https://github.com/nphyatt/socket-to-me/blob/master/generator.js for an example of a generator.

sockme --amount 1000 --generator <file.js> ws://localhost:8080

Example

sockme --amount 10 --duration 5 ws://localhost:8080

This will hit the WebSocket server that runs on localhost:8080 with 1000 connections and sends 100 messages over each established connection. Once sockme is done with socking your connections it will generate a detailed report:

Socket To Me!                                                  version: 1.0.0

Yo here's the deal,
I'm gonna...
- Run 4 workers.
- Create all the connections at once
- Socket To 10 websockets on 1 connection for 5 seconds.

Hope you're happy with yourself.

Connecting to ws://localhost:8080


Time ran             5.026 seconds
Connected            10
Disconnected         0
Errors               0

                Total Data      Avg. Msg        Max. Msg        Min. Msg        # Msgs
TX Stats:       34.6kB          372.95B         1.07kB          101B            95
RX Stats:       40.65kB         297.29B         1.08kB          0B              140

License

MIT