Today we're gonna benchmark nodejs/bin+uwebsocket with golang+nbio. The code is here, both taken from their own example. The benchmark plan is create 10k client/connection, send both text/binary string and receive back the from server and sleep for 1s,100ms,10ms or 1ms, the result is as expected:
go 1.20.5 nbio 1.3.16
rps: 19157.16 avg/max latency = 1.66ms/319.88ms elapsed 10.2s
102 MB 0.6 core usage
rps: 187728.05 avg/max latency = 0.76ms/167.76ms elapsed 10.2s
104 MB 5 core usage
rps: 501232.80 avg/max latency = 12.48ms/395.01ms elapsed 10.1s
rps: 498869.28 avg/max latency = 12.67ms/425.04ms elapsed 10.1s
134 MB 15 core usage
bun 0.6.9
rps: 17420.17 avg/max latency = 5.57ms/257.61ms elapsed 10.1s
48 MB 0.2 core usage
rps: 95992.29 avg/max latency = 29.93ms/242.74ms elapsed 10.4s
rps: 123589.91 avg/max latency = 40.67ms/366.15ms elapsed 10.2s
rps: 123171.42 avg/max latency = 62.74ms/293.29ms elapsed 10.1s
55 MB 1 core usage
node 18.16.0
rps: 18946.51 avg/max latency = 6.64ms/229.28ms elapsed 10.3s
59 MB 0.2 core usage
rps: 97032.08 avg/max latency = 44.06ms/196.41ms elapsed 11.1s
rps: 114449.91 avg/max latency = 72.62ms/295.33ms elapsed 10.3s
rps: 109512.05 avg/max latency = 79.27ms/226.03ms elapsed 10.2s
59 MB 1 core usage
First line until 4th line are with 1s, 100ms, 10ms, 1ms delay before next request. Since Golang/nbio is by default can utilize multi-core so can handle ~50 rps per client, while Bun/Nodejs 11-12 rps per client. If you found a bug, or want to contribute another language (or create better client, just create a pull request on the github link above.
programming: the action or process of writing computer programs. | rants: speak or shout at length in a wild, [im]passioned way.
Showing posts with label websocket. Show all posts
Showing posts with label websocket. Show all posts
2023-06-14
2016-11-30
Websocket Benchmark
Once again, today I found another benchmark, about websocket:
Round #1
Round #2
You can see the raw result here.
Round #1
Language | Clients | RAM (MB) | RAM / Client (KB) | LOC | Library |
C++ | 33,000 | 600 | 18.62 | 140 | https://github.com/zaphoyd/websocketpp |
Clojure | 27,000 | 1,500 | 56.89 | 50 | http://www.http-kit.org/ |
Elixir | 24,000 | 1,900 | 81.07 | 20 | http://www.phoenixframework.org/ |
Go | 24,000 | 800 | 34.13 | 100 | Built-in golang.org/x/net/websocket |
NodeJS | 13,000 | 300 | 23.63 | 31 | https://github.com/websockets/ws |
JRuby | 1,100 | 650 | 605.09 | 20 | http://rubyonrails.org/ |
Ruby | 500 | 150 | 307.20 | 20 | http://rubyonrails.org/ |
Round #2
Language | Version | Thread | Clients | Clients (without Payload) |
Javascript / Node / uws | 6.6.0 | 26,000 | ||
Haskell - no chan | 1.2 | 25,000 | 37,000 | |
C++ / uWebSockets / RapidJSON | 5.4.0 | 1 | 24,000 | 35,000 |
Go / Websocket | 1.7 | 22,000 | 39,000 | |
C++ / Crow / RapidJSON | 5.4.0 | 1 | 20,000 | |
Go / Gorilla | 1.7 | 20,000 | ||
Java / Netty | 1.8.0_101 | 20,000 | ||
Rust - ws | 1.11.0 | 20,000 | ||
Elixir / Plug | 1.3.2 | 19,000 | ||
Java / Undertow | 1.8.0_101 | 19,000 | ||
NodeJS / Faye - clustered | 6.6.0 | 19,000 | ||
Rust - scopedpool-ws | 1.11.0 | 19,000 | ||
Clojure / Java | 1.8.0_101 | 18,000 | ||
C++ / WebsocketPP / jsoncpp | 5.4.0 | 8 | 17,000 | |
JRuby / Eventmachine | 9.1.2.0 | 17,000 | ||
Rust - threadpool-ws | 1.11.0 | 17,000 | ||
Elixir / Phoenix | 1.3.2 | 15,000 | ||
C++ / Crow / RapidJSON | 5.4.0 | 8 | 14,000 | 42,000 |
Javascript / Node / ws | 6.6.0 | 14,000 | ||
Javascript / Node / ws - clustered | 6.6.0 | 14,000 | ||
C++ / WebsocketPP / jsoncpp | 5.4.0 | 1 | 13,000 | |
Haskell | 1.2 | 13,000 | ||
NodeJS / Faye | 6.6.0 | 13,000 | ||
Ruby / Eventmachine | 2.3.1p112 | 13,000 | ||
Javascript / Node / uws - clustered | 6.6.0 | 12,000 | ||
JRuby / Rails | 9.1.2.0 | 1,000 | ||
Ruby / Rails | 2.3.1p112 | 500 |
You can see the raw result here.
Subscribe to:
Posts
(
Atom
)