https://github.com/andrehrferreira/bench-ws
Websocket performance testing in different languages
https://github.com/andrehrferreira/bench-ws
bun cpp csharp dart deno elixir erlang go java node php python ruby rust swoole uwebsocket websocket zig
Last synced: 12 months ago
JSON representation
Websocket performance testing in different languages
- Host: GitHub
- URL: https://github.com/andrehrferreira/bench-ws
- Owner: andrehrferreira
- Created: 2024-08-06T09:34:21.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-08-14T23:41:40.000Z (over 1 year ago)
- Last Synced: 2025-03-26T10:21:27.045Z (about 1 year ago)
- Topics: bun, cpp, csharp, dart, deno, elixir, erlang, go, java, node, php, python, ruby, rust, swoole, uwebsocket, websocket, zig
- Language: JavaScript
- Homepage:
- Size: 184 MB
- Stars: 8
- Watchers: 2
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Benchmark Websocket
=========================
The result so far is an Intel Core i9 10980XE desktop, 256GB DDR RAM, individual Docker configuration for each server, 2024-08-14
| (index) | Server | Avg Messages/sec | % Difference |
|:-------:|:------------------:|:----------------:|:------------:|
| 0 | Rust | 1,438,459.2 | 247.87% |
| 1 | Java | 1,136,289.2 | 174.79% |
| 2 | C# | 876,244.4 | 111.91% |
| 3 | C++ (Crow + TBB) | 484,825.4 | 17.25% |
| 4 | PHP / Swoole | 473,327 | 14.47% |
| 5 | Erlang / Elixir | 348,513.2 | -15.72% |
| 6 | Go (Gorilla) | 253,044.8 | -38.81% |
| 7 | Bun | 230,723.2 | -44.20% |
| 8 | uWebsocket.js | 225,335.6 | -45.51% |
| 9 | Go (Fasthttp) | 191,886 | -53.60% |
| 10 | Node | 124,721.6 | -69.84% |
| 11 | Ruby | 3,557.8 | -99.14% |
| 12 | Python3 | 1,177 | -99.72% | // Need revision
| 13 | Dart | 980 | -99.76% | // Need revision
The result so far is an Intel Core i9 10980XE desktop, 256GB DDR RAM, individual Docker configuration for each server
| (index) | Server | Avg Messages/sec | % Difference |
|---------|------------------|------------------|--------------|
| 0 | Rust | 1,232,041.4 | 541.60% |
| 1 | Java | 1,175,892 | 516.41% |
| 2 | C# | 1,132,847.8 | 496.48% |
| 3 | C++ (Crow + TBB) | 504,620.8 | 157.50% |
| 4 | PHP / Swoole | 485,236.6 | 149.58% |
| 5 | Erlang / Elixir | 296,681.2 | 66.95% |
| 6 | Bun | 266,875.2 | 53.20% |
| 7 | Go | 263,391.2 | 51.51% |
| 8 | Python3 | 191,937 | 16.15% |
| 9 | Node | 154,831.2 | -4.33% |
| 10 | uWebsocket.js | 100,140.4 | -33.47% |
| 11 | Dart | 6,936.8 | -95.12% |
| 12 | Ruby | 3,456.4 | -97.51% |
The result so far is an Intel Core i9 10980XE desktop, 256GB of DDR RAM, using WSL and manual configuration.
| | Server | Avg Messages/sec | % Difference |
|----|------------------|------------------|--------------|
| 0 | Rust | 990,420.4 | 315.79% |
| 1 | C# | 871,702.6 | 265.95% |
| 2 | Erlang / Elixir | 654,033.6 | 156.37% |
| 3 | C++ (Crow + TBB) | 518,418.2 | 90.88% |
| 4 | Java | 146,882.6 | -57.73% |
| 5 | Bun | 88,682.2 | -76.19% |
| 6 | Go | 87,612.8 | -76.53% |
| 7 | uWebsocket.js | 82,604.8 | -78.24% |
| 8 | PHP / Swoole | 80,273.8 | -79.00% |
| 9 | Python3 | 72,891.0 | -81.36% |
| 10 | Node | 63,003.6 | -84.76% |
| 11 | * Deno | 61,819.0 | -85.18% |
* Deno has been removed from testing due to memory leek and poor performance issues
* Soon implementations in Zig
Run in Node
-------------
```bash
$ node server-node.js
```
Run in uWebsocket.js
-------------
```bash
$ node server-uws.js
```
Run in Deno
-------------
```bash
$ deno run -A server-deno.mjs
```
Run in Bun
-------------
```bash
$ bun server-bun.js
```
Run in C#
-------------
Build
```bash
$ cd server-csharp
$ dotnet build
```
Run
```bash
$ dotnet run
```
Run in Erlang / Elixir
-------------
Depedences
```bash
$ mix deps.get
```
Build
```bash
$ cd server_elixir
$ mix deps.compile
```
Run
```bash
$ mix run --no-halt
```
Run in Phyton 3
-------------
Depedences
```bash
$ pip install gevent
$ pip install gevent-websocket
```
Run
```bash
$ cd server-python
$ python server-python.py
```
Run in Rust
-------------
Build
```bash
$ cd server-rust
$ cargo build --release
```
Run
```bash
$ ./target/release/server-rust
```
Run in Java
-------------
Build
```bash
$ cd server-java
$ mvn compile
```
Run
```bash
$ java -jar server-java/target/server-1.0-SNAPSHOT-jar-with-dependencies.jar
```
Run in Go
-------------
Build
```bash
$ cd server-go
$ go build
```
Run
```bash
$ ./server
```
Run in C++ (Crow + TBB)
-------------
Dependeces
```bash
$ vcpkg install
```
Run
```bash
$ server-cpp/x64/Release/server-cpp.exe
```
Run in PHP / Swoole
-------------
Run
```bash
$ php ./server-swoole/server.php
```
## Client
To start the test it will be necessary to start all the servers, each one is configured on a port
```bash
$ bun ./client.js
```
The test script will perform local tests and send and broadcast messages and will store the total number of messages received per second. It will also generate a comparison between all tested servers, summarizing the average number of messages per second and the comparative performance to other servers.