V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
panjf2000
V2EX  ›  分享创造

[开源] gnet: 一个基于事件驱动的轻量级且高性能 Go 网络库

  •  
  •   panjf2000 ·
    panjf2000 · 2019-10-15 11:29:51 +08:00 · 2605 次点击
    这是一个创建于 1648 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    gnet 衍生自另一个项目:evio,但性能远胜之。

    功能

    • 高性能的基于多线程 /Go 程模型的 event-loop 事件驱动
    • 内置 Round-Robin 轮询负载均衡算法
    • 内置 goroutine 池,由开源库 ants 提供支持
    • 内置 bytes 内存池,由开源库 pool 提供支持
    • 简洁的 APIs
    • 基于 Ring-Buffer 的高效内存利用
    • 支持多种网络协议:TCP、UDP、Unix Sockets
    • 支持两种事件驱动机制:Linux 里的 epoll 以及 FreeBSD 里的 kqueue
    • 支持异步写操作
    • 灵活的事件定时器
    • SO_REUSEPORT 端口重用
    5 条回复    2019-10-15 15:59:47 +08:00
    panjf2000
        1
    panjf2000  
    OP
       2019-10-15 11:35:39 +08:00
    发不了外链。。。
    有人知道怎么回事吗?
    panjf2000
        2
    panjf2000  
    OP
       2019-10-15 11:37:26 +08:00
    zeromake
        3
    zeromake  
       2019-10-15 12:02:03 +08:00 via Android
    可以的 gev 和 gnet 互相在 readme 里打败了对方
    zeromake
        4
    zeromake  
       2019-10-15 12:48:15 +08:00   ❤️ 1
    panjf2000
        5
    panjf2000  
    OP
       2019-10-15 15:59:47 +08:00
    @zeromake
    这个问题,可以看下这个 github issue:github.com/panjf2000/gnet/issues/17
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2276 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 00:56 · PVG 08:56 · LAX 17:56 · JFK 20:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.