欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【开源】gnet: 一个轻量级且高性能的 Go 网络库 go网络库event-loopreactor 

程序员文章站 2022-03-06 08:49:56
...

Github 主页: https://github.com/panjf2000/gnet

gnet 是一个基于 Event-Loop 事件驱动的高性能和轻量级网络库。这个库直接使用 epoll 和 kqueue 系统调用而非标准 Golang 网络包:net 来构建网络应用,它的工作原理类似两个开源的网络库:libuv 和 libevent。

 

这个项目存在的价值是提供一个在网络包处理方面能和 Redis、Haproxy 这两个项目具有相近性能的 Go 语言网络服务器框架。

 

gnet 的亮点在于它是一个高性能、轻量级、非阻塞的纯 Go 实现的传输层(TCP/UDP/Unix-Socket)网络库,开发者可以使用 gnet 来实现自己的应用层网络协议,从而构建出自己的应用层网络应用:比如在 gnet 上实现 HTTP 协议就可以创建出一个 HTTP 服务器 或者 Web 开发框架,实现 Redis 协议就可以创建出自己的 Redis 服务器等等。

 

gnet 衍生自另一个项目:evio,但是性能更好。

 

功能

高性能 的基于多线程/Go程模型的 Event-Loop 事件驱动

内置 Round-Robin 轮询负载均衡算法

简洁的 APIs

基于 Ring-Buffer 的高效内存利用

支持多种网络协议:TCP、UDP、Unix Sockets

支持两种事件驱动机制:Linux 里的 epoll 以及 FreeBSD 里的 kqueue

支持异步写操作

灵活的事件定时器

SO_REUSEPORT 端口重用