同步操作将从 Gitee 极速下载/gnet 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
英文 | 中文
gnet
是一个基于事件驱动的高性能和轻量级网络框架。它直接使用 epoll 和 kqueue 系统调用而非标准 Go 网络包:net 来构建网络应用,它的工作原理类似两个开源的网络库:netty 和 libuv,这也使得 gnet
达到了一个远超 Go net 的性能表现。
gnet
设计开发的初衷不是为了取代 Go 的标准网络库:net,而是为了创造出一个类似于 Redis、Haproxy 能高效处理网络包的 Go 语言网络客户端/服务器框架。因此,gnet
在功能上的全面性并不如 net,它只提供网络编程中最核心的功能和最精简的 APIs,而且 gnet
也并没有打算变成一个全功能、无所不包的网络库,因为我觉得 Go net 在这方面已经做得足够好了。
gnet
的卖点在于它是一个高性能、轻量级、非阻塞的纯 Go 实现的传输层(TCP/UDP/Unix Domain Socket)网络框架,开发者可以使用 gnet
来实现自己的应用层网络协议(HTTP、RPC、Redis、WebSocket 等等),从而构建出自己的应用层网络应用:比如在 gnet
上实现 HTTP 协议就可以创建出一个 HTTP 服务器 或者 Web 开发框架,实现 Redis 协议就可以创建出自己的 Redis 服务器等等。
gnet
衍生自另一个项目:evio
,但拥有更丰富的功能特性,且性能远胜之。
TCP
、UDP
和 Unix Domain Socket
Round-Robin(轮询)
、Source-Addr-Hash(源地址哈希)
和 Least-Connections(最少连接数)
epoll
以及 FreeBSD/DragonFly/Darwin 里的 kqueue
gnet
客户端gnet
是一个 Go module,而且我们也强烈推荐通过 Go Modules 来使用 gnet
,在开启 Go Modules 支持(Go 1.11+)之后可以通过简单地在代码中写 import "github.com/panjf2000/gnet/v2"
来引入 gnet
,然后执行 go mod download/go mod tidy
或者 go [build|run|test]
这些命令来自动下载所依赖的包。
go get -u github.com/panjf2000/gnet/v2
go get -u github.com/panjf2000/gnet
以下公司/组织在生产环境上使用了 gnet
作为底层网络服务。
如果你的项目也在使用 gnet
,欢迎给我提 Pull Request 来更新这份列表。
# 硬件环境
* 28 HT Cores Intel(R) Xeon(R) Gold 5120 CPU @ 2.20GHz
* 32GB RAM
* Ubuntu 18.04.3 4.15.0-88-generic #88-Ubuntu
* Dedicated Cisco 10-gigabit Ethernet switch
* Go1.19.x linux/amd64
这是包含全部编程语言框架的性能排名前 50 的结果,总榜单包含了全世界共计 499 个框架,其中 gnet
排名第一。
这是 Go 语言分类下的全部排名,gnet
超越了其他所有框架,位列第一,是最快的 Go 网络框架。
完整的排行可以通过 TechEmpower Plaintext Benchmark 查看。
# 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
# 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
gnet
的源码需在遵循 Apache-2.0 开源证书的前提下使用。
请在提 PR 之前仔细阅读 Contributing Guidelines,感谢那些为 gnet
贡献过代码的开发者!
如果有意向,可以通过每个月定量的少许捐赠来支持这个项目。
每月定量捐赠 10 刀即可成为本项目的赞助者,届时您的 logo 或者 link 可以展示在本项目的 README 上。
当您通过以下方式进行捐赠时,请务必留下姓名、GitHub 账号或其他社交媒体账号,以便我将其添加到捐赠者名单中,以表谢意。
gnet
项目一直以来都是在 JetBrains 公司旗下的 GoLand 集成开发环境中进行开发,基于 free JetBrains Open Source license(s) 正版免费授权,在此表达我的谢意。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。