eranyanay /1m-go-websockets

handling 1M websockets connections in Go

★ 5,992⑂ 633👁 107⑃ 7● 0▤ 0
GoCreated 2019-02-10
5,992
stars
+0+0+-3
633
forks
107
watchers
7
prs
0
issues
0
releases
–
discussions

README

Going Infinite, handling 1M websockets connections in Go
This repository holds the complete implementation of the examples seen in Gophercon Israel talk, 2019.

 Going Infinite, handling 1 millions websockets connections in Go / Eran Yanay —  [Video | Slides ]

It doesnt intend or claim to serve as a better, more optimal implementation than other libraries that implements the websocket protocol, it simply shows a set of tools, all combined together to demonstrate a server written in pure Go that is able to serve more than a million websockets connections with less than 1GB of ram.

 Usage
This repository demonstrates how a very high number of websockets connections can be maintained efficiently in Linux

Everything is written in pure Go

Each folder shows an example of a server implementation that overcomes various issues raised by the OS, by the hardware or the Go runtime itself, as shown during the talk.

setup.sh is a wrapper to running multiple instances using Docker. See content of the script for more details of how to use it.

destroy.sh is a wrapper to stop all running clients.

A single client instance can be executed by running go run client.go -conn=

 Remarks
This repo consists of a set of examples that were demonstrated during a live talk in Gophercon. 

What you see is what you get - while the implementation is fully functional, it doesn't intend to serve as a production-ready code, and no new features that were asked will be added. 

The only purpose of this repository is to serve as a reference and a case study.

Snapshot: 2026-11-04T14:00:00Z · Data license Apache-2.0 · JSON