# gnet **Repository Path**: opensource-release/gnet ## Basic Information - **Project Name**: gnet - **Description**: πŸš€ gnet is a high-performance, lightweight, non-blocking, event-driven networking framework written in pure Go. - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://gnet.host/ - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-03 - **Last Updated**: 2026-01-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

gnet

panjf2000%2Fgnet | Trendshift

English | [δΈ­ζ–‡](README_ZH.md) ### πŸŽ‰πŸŽ‰πŸŽ‰ Feel free to join [the channels about `gnet` on the Discord Server](https://discord.gg/UyKD7NZcfH). # πŸ“– Introduction `gnet` is an event-driven networking framework that is ultra-fast and lightweight. It is built from scratch by exploiting [epoll](https://man7.org/linux/man-pages/man7/epoll.7.html) and [kqueue](https://en.wikipedia.org/wiki/Kqueue) and it can achieve much higher performance with lower memory consumption than Go [net](https://golang.org/pkg/net/) in many specific scenarios. `gnet` and [net](https://golang.org/pkg/net/) don't share the same philosophy in network programming. Thus, building network applications with `gnet` can be significantly different from building them with [net](https://golang.org/pkg/net/), and the philosophies can't be reconciled. There are other similar products written in other programming languages in the community, such as [libuv](https://github.com/libuv/libuv), [netty](https://github.com/netty/netty), [twisted](https://github.com/twisted/twisted), [tornado](https://github.com/tornadoweb/tornado), etc. which work in a similar pattern as `gnet` under the hood. `gnet` is not designed to displace the Go [net](https://golang.org/pkg/net/), but to create an alternative in the Go ecosystem for building performance-critical network services. As a result of which, `gnet` is not as comprehensive as Go [net](https://golang.org/pkg/net/), it provides only the core functionality (via a concise set of APIs) required by a network application and it doesn't plan on becoming a coverall networking framework, as I think Go [net](https://golang.org/pkg/net/) has done a good enough job in that area. `gnet` sells itself as a high-performance, lightweight, non-blocking, event-driven networking framework written in pure Go which works on the transport layer with TCP/UDP protocols and Unix Domain Socket. It enables developers to implement their own protocols(HTTP, RPC, WebSocket, Redis, etc.) of application layer upon `gnet` for building diversified network services. For instance, you get an HTTP Server if you implement HTTP protocol upon `gnet` while you have a Redis Server done with the implementation of Redis protocol upon `gnet` and so on. **`gnet` derives from the project: `evio` with much higher performance and more features.** # πŸš€ Features ## πŸ¦– Milestones - [x] [High-performance](#-performance) event-driven looping based on a networking model of multiple threads/goroutines - [x] Built-in goroutine pool powered by the library [ants](https://github.com/panjf2000/ants) - [x] Lock-free during the entire runtime - [x] Concise and easy-to-use APIs - [x] Efficient, reusable, and elastic memory buffer: (Elastic-)Ring-Buffer, Linked-List-Buffer and Elastic-Mixed-Buffer - [x] Multiple protocols/IPC mechanisms: `TCP`, `UDP`, and `Unix Domain Socket` - [x] Multiple load-balancing algorithms: `Round-Robin`, `Source-Addr-Hash`, and `Least-Connections` - [x] Flexible ticker event - [x] `gnet` client - [x] Running on `Linux`, `macOS`, `Windows`, and *BSD: `Darwin`/`DragonFlyBSD`/`FreeBSD`/`NetBSD`/`OpenBSD` - [x] **Edge-triggered** I/O support - [x] Multiple network addresses binding - [x] Support registering new connections to event-loops ## πŸ•Š Roadmap - [ ] **TLS** support - [ ] [io_uring](https://github.com/axboe/liburing/wiki/io_uring-and-networking-in-2023) support - [ ] **KCP** support ***Windows version of `gnet` should only be used in development for developing and testing, it shouldn't be used in production.*** # 🎬 Getting started `gnet` is available as a Go module and we highly recommend that you use `gnet` via [Go Modules](https://go.dev/blog/using-go-modules), with Go 1.11 Modules enabled (Go 1.11+), you can just simply add `import "github.com/panjf2000/gnet/v2"` to the codebase and run `go mod download/go mod tidy` or `go [build|run|test]` to download the necessary dependencies automatically. ## With v2 ```bash go get -u github.com/panjf2000/gnet/v2 ``` ## With v1 ```bash go get -u github.com/panjf2000/gnet ``` # 🎑 Use cases The following corporations/organizations use `gnet` as the underlying network service in production.
If you're also using `gnet` in production, please help us enrich this list by opening a pull request. # πŸ“Š Performance ## Benchmarks on TechEmpower ```bash # Hardware Environment * 28 HT Cores Intel(R) Xeon(R) Gold 5120 CPU @ 3.20GHz * 32GB RAM * Dedicated Cisco 10-gigabit Ethernet switch * Debian 12 "bookworm" * Go1.19.x linux/amd64 ``` ![](https://raw.githubusercontent.com/panjf2000/illustrations/master/benchmark/techempower-plaintext-top50-light.jpg) This is a leaderboard of the top ***50*** out of ***486*** frameworks that encompass various programming languages worldwide, in which `gnet` is ranked ***first***. ![](https://raw.githubusercontent.com/panjf2000/illustrations/master/benchmark/techempower-plaintext-topN-go-light.png) This is the full framework ranking of Go and `gnet` tops all the other frameworks, which makes `gnet` the ***fastest*** networking framework in Go. To see the full ranking list, visit [TechEmpower Benchmark **Round 22**](https://www.techempower.com/benchmarks/#hw=ph&test=plaintext§ion=data-r22). ***Note that the HTTP implementation of gnet on TechEmpower is half-baked and fine-tuned for benchmark purposes only and far from production-ready.*** ## Contrasts to the similar networking libraries ### On Linux (epoll) #### Environment ```bash # Machine information OS : Ubuntu 20.04/x86_64 CPU : 8 CPU cores, AMD EPYC 7K62 48-Core Processor Memory : 16.0 GiB # Go version and settings Go Version : go1.17.2 linux/amd64 GOMAXPROCS : 8 # Benchmark parameters TCP connections : 1000/2000/5000/10000 Packet size : 512/1024/2048/4096/8192/16384/32768/65536 bytes Test duration : 15s ``` [![](https://github.com/panjf2000/gnet_benchmarks/raw/master/results/echo_conn_linux.png)](https://github.com/gnet-io/gnet-benchmarks) [![](https://github.com/panjf2000/gnet_benchmarks/raw/master/results/echo_packet_linux.png)]((https://github.com/gnet-io/gnet-benchmarks)) ### On MacOS (kqueue) #### Environment ```bash # Machine information OS : MacOS Big Sur/x86_64 CPU : 6 CPU cores, Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz Memory : 16.0 GiB # Go version and settings Go Version : go1.16.5 darwin/amd64 GOMAXPROCS : 12 # Benchmark parameters TCP connections : 300/400/500/600/700 Packet size : 512/1024/2048/4096/8192 bytes Test duration : 15s ``` [![](https://github.com/panjf2000/gnet_benchmarks/raw/master/results/echo_conn_macos.png)]((https://github.com/gnet-io/gnet-benchmarks)) [![](https://github.com/panjf2000/gnet_benchmarks/raw/master/results/echo_packet_macos.png)]((https://github.com/gnet-io/gnet-benchmarks)) ### Combat with Rust [![](https://res.strikefreedom.top/static_res/blog/figures/Gjfx2GoXAAA5haW.jpeg)](https://www.youtube.com/watch?v=31R8Ef9A0iw) # ⚠️ License The source code of `gnet` should be distributed under the Apache-2.0 license. # πŸ‘ Contributors Please read the [Contributing Guidelines](CONTRIBUTING.md) before opening a PR and thank you to all the developers who already made contributions to `gnet`! # βš“ Relevant Articles - [A Million WebSockets and Go](https://www.freecodecamp.org/news/million-websockets-and-go-cc58418460bb/) - [Going Infinite, handling 1M websockets connections in Go](https://speakerdeck.com/eranyanay/going-infinite-handling-1m-websockets-connections-in-go) - [Go netpoller εŽŸη”Ÿη½‘η»œζ¨‘εž‹δΉ‹ζΊη ε…¨ι’ζ­η§˜](https://strikefreedom.top/go-netpoll-io-multiplexing-reactor) - [gnet: δΈ€δΈͺθ½»ι‡ηΊ§δΈ”ι«˜ζ€§θƒ½ηš„ Golang η½‘η»œεΊ“](https://strikefreedom.top/go-event-loop-networking-library-gnet) - [ζœ€εΏ«ηš„ Go η½‘η»œζ‘†ζžΆ gnet ζ₯啦!](https://strikefreedom.top/releasing-gnet-v1-with-techempower) # β˜•οΈ Buy me a coffee > Please be sure to leave your name, GitHub account, or other social media accounts when you donate by the following means so that I can add it to the list of donors as a token of my appreciation.
By me coffee Patreon OpenCollective
# πŸ”‘ JetBrains OS licenses `gnet` has been being developed with `GoLand` IDE under the ***free JetBrains Open Source license(s)*** granted by JetBrains s.r.o., hence I would like to express my thanks here. JetBrains logo. # πŸ”‹ Sponsorship

This project is supported by: