↓ 跳过正文
  1. Projects/

网络框架 —— gnet

·145 字·1 分钟·
潘少
作者
潘少
代码 | 博客 | 摄影 | 旅行 | 开源 | 极客

📖 简介
#

gnet 是一个基于事件驱动的高性能和轻量级网络框架。这个框架是基于 epoll 和 kqueue 从零开发的,而且相比 Go net,它能以更低的内存占用实现更高的性能。

gnet 和 net 有着不一样的网络编程模式。因此,用 gnet 开发网络应用和用 net 开发区别很大,而且两者之间不可调和。社区里有其他同类的产品像是 libuv, netty, twisted, tornado,gnet 的底层工作原理和这些框架非常类似。

gnet 不是为了取代 net 而生的,而是在 Go 生态中为开发者提供一个开发性能敏感的网络服务的替代品。也正因如此,gnet 在功能全面性上比不了 Go 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,实现 HTTP、RPC、WebSocket、Redis 等应用层协议。

跨平台

支持在 Linux、macOS、Windows 与 BSD 系统上开发和运行。

🚀 功能
#

🦖 当前支持
#

  • 基于多线程/协程网络模型的高性能事件驱动循环
  • 内置 goroutine 池,由开源库 ants 提供支持
  • 整个生命周期是无锁的
  • 简单易用的 APIs
  • 高效、可重用而且自动伸缩的内存 buffer:(Elastic-)Ring-Buffer, Linked-List-Buffer and Elastic-Mixed-Buffer
  • 多种网络协议/IPC 机制:TCP、UDP 和 Unix Domain Socket
  • 多种负载均衡算法:Round-Robin(轮询)、Source-Addr-Hash(源地址哈希) 和 Least-Connections(最少连接数)
  • 灵活的事件定时器
  • gnet 客户端支持
  • 支持 Linux, macOS, Windows 和 *BSD 操作系统: Darwin/DragonFlyBSD/FreeBSD/NetBSD/OpenBSD
  • Edge-triggered I/O 支持
  • 多网络地址绑定

gnet 的 Windows 版本应该仅用于开发阶段的开发和测试,切勿用于生产环境。

以下公司/组织在生产环境上使用了 gnet 作为底层网络服务。

如果你也正在生产环境上使用 gnet,欢迎提 Pull Request 来丰富这份列表。

相关文章


← Goroutine 池 —— ants 我的开源项目 →

comments powered by Disqus