Thor 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 plain ol HTTP and have no support for WebSockets and 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. Thor
fixes all of this.

Thor 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 bundled package manager npm to
install this module:

Thor 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 thor should be written in a WebSocket compatible format
using the ws or wss protocols:

thor --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 securedwss://localhost:8081 server. So a total of 10000 connections will be made.

One thing to keep in mind is that 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.

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 utf8 and binary messages. It uses
a really simple generator by default.

Checkout https://github.com/observing/thor/blob/master/generator.js for an
example of a generator.

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