1m Go Tcp Server

benchmarks for implementation of servers which support 1 million connections
Alternatives To 1m Go Tcp Server
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
1m Go Tcp Server1,237
2 years ago2April 15, 20213Go
benchmarks for implementation of servers which support 1 million connections
Benchmarks1,092
2 days ago26otherC#
Benchmarks for ASP.NET Core
Agoo8321112 months ago60June 21, 20223mitC
A High Performance HTTP Server for Ruby
Wsdemo409
10 years ago6otherErlang
A Cowboy Websocket demo
Simps3952a year ago6October 15, 20202apache-2.0PHP
🚀 A simple, lightweight and high-performance PHP coroutine framework.
Websocket Shootout360
3 years ago9mitJavaScript
A comparison of websocket servers in multiple languages and frameworks
Warp351
11 days ago62December 02, 20225agpl-3.0Go
S3 benchmarking tool
Clojure Web Server Benchmarks343
7 years ago5Clojure
Clojure web server benchmarks
Gortcd324
3 years ago95November 01, 202010bsd-3-clauseGo
Fast TURN and STUN server: cross-platform, hot reload, flexible config
Perfops Cli282
2 months ago41November 18, 20224Go
A simple command line tool to interact with hundreds of servers around the world.
Alternatives To 1m Go Tcp Server
Select To Compare


Alternative Project Comparisons
Readme

Benchmark for implementation of servers that support 1m connections

inspired by handling 1M websockets connections in Go

Servers

  1. 1_simple_tcp_server: a 1m-connections server implemented based on goroutines per connection
  2. 2_epoll_server: a 1m-connections server implemented based on epoll
  3. 3_epoll_server_throughputs: add throughputs and latency test for 2_epoll_server
  4. 4_epoll_client: implement the client based on epoll
  5. 5_multiple_client: use multiple epoll to manage connections in client
  6. 6_multiple_server: use multiple epoll to manage connections in server
  7. 7_server_prefork: use prefork style of apache to implement server
  8. 8_server_workerpool: use Reactor pattern to implement multiple event loops
  9. 9_few_clients_high_throughputs: a simple goroutines per connection server for test throughtputs and latency
  10. 10_io_intensive_epoll_server: an io-bound multiple epoll server
  11. 11_io_intensive_goroutine: an io-bound goroutines per connection server
  12. 12_cpu_intensive_epoll_server: a cpu-bound multiple epoll server
  13. 13_cpu_intensive_goroutine: an cpu-bound goroutines per connection server

Test Environment

  • two E5-2630 V4 cpus, total 20 cores, 40 logicial cores.
  • 32G memory

tune the linux:

sysctl -w fs.file-max=2000500
sysctl -w fs.nr_open=2000500
sysctl -w net.nf_conntrack_max=2000500
ulimit -n 2000500

sysctl -w net.ipv4.tcp_tw_recycle=1
sysctl -w net.ipv4.tcp_tw_reuse=1

client sends the next request only when it has received the response. it has not used the pipeline style to test.

Benchmarks

1m connections

throughputs (tps) latency
goroutine-per-conn 202830 4.9s
single epoll(both server and client) 42495 23s
single epoll server 42402 0.8s
multiple epoll server 197814 0.9s
prefork 444415 1.5s
workerpool 190022 0.3s

中文介绍:

  1. 百万 Go TCP 连接的思考: epoll方式减少资源占用
  2. 百万 Go TCP 连接的思考2: 百万连接的服务器的性能
  3. 百万 Go TCP 连接的思考3: 低连接场景下的服务器的吞吐和延迟
Popular Server Projects
Popular Benchmark Projects
Popular Networking Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Golang
Server
Benchmark
Tcp
Cpu
Goroutine
Epoll