Goev 项目教程

Goev 项目教程

goev goev is a lightweight, concise i/o event demultiplexer implementation in Go goev 项目地址: https://gitcode.com/gh_mirrors/go/goev

1. 项目目录结构及介绍

Goev 项目的目录结构如下:

goev/
├── github/workflows/
│   └── example
├── images/
├── netfd/
├── .gitignore
├── DOCUMENT_CN.md
├── LICENSE
├── README.md
├── acceptor.go
├── async_write.go
├── bufpool.go
├── bufpool_test.go
├── build.sh
├── connect_pool.go
├── connector.go
├── connector_test.go
├── doc.go
├── epoll.go
├── ev_data.go
├── ev_handler.go
├── go.mod
├── go.sum
├── io_handle.go
├── io_handle_async.go
├── options.go
├── poll_sync_opt.go
├── reactor.go
├── ringbuffer.go
├── ringbuffer_test.go
├── timer_4heap.go
├── timer_4heap_test.go
└── ...

目录结构介绍

  • github/workflows/: 包含 GitHub Actions 的工作流配置文件。
  • images/: 存放项目相关的图片资源。
  • netfd/: 网络文件描述符相关的代码。
  • .gitignore: Git 忽略文件配置。
  • DOCUMENT_CN.md: 中文文档。
  • LICENSE: 项目许可证文件。
  • README.md: 项目介绍和使用说明。
  • acceptor.go: 接受连接的处理逻辑。
  • async_write.go: 异步写入处理逻辑。
  • bufpool.go: 缓冲池实现。
  • bufpool_test.go: 缓冲池测试代码。
  • build.sh: 构建脚本。
  • connect_pool.go: 连接池实现。
  • connector.go: 连接器实现。
  • connector_test.go: 连接器测试代码。
  • doc.go: 文档注释。
  • epoll.go: Epoll 事件处理实现。
  • ev_data.go: 事件数据处理。
  • ev_handler.go: 事件处理器接口。
  • go.mod: Go 模块依赖管理文件。
  • go.sum: Go 模块依赖校验文件。
  • io_handle.go: I/O 处理逻辑。
  • io_handle_async.go: 异步 I/O 处理逻辑。
  • options.go: 配置选项处理。
  • poll_sync_opt.go: 同步轮询选项处理。
  • reactor.go: 反应堆模式实现。
  • ringbuffer.go: 环形缓冲区实现。
  • ringbuffer_test.go: 环形缓冲区测试代码。
  • timer_4heap.go: 四叉堆定时器实现。
  • timer_4heap_test.go: 四叉堆定时器测试代码。

2. 项目启动文件介绍

Goev 项目的启动文件是 main.go,通常位于项目的根目录下。启动文件负责初始化项目配置、启动反应堆(Reactor)和监听端口等操作。

启动文件示例

package main

import (
    "github.com/shaovie/goev"
    "runtime"
)

var connReactor *goev.Reactor

type Conn struct {
    goev.IOHandle
}

func (c *Conn) OnOpen() bool {
    if err := connReactor.AddEvHandler(c, c.Fd(), goev.EvIn); err != nil {
        return false
    }
    return true
}

func (c *Conn) OnRead() bool {
    buf, n, _ := c.Read()
    if n == 0 {
        return false
    }
    // 解析消息
    return true
}

func (c *Conn) OnClose() {
    c.Destroy() // 释放资源
}

func main() {
    runtime.GOMAXPROCS(runtime.NumCPU()*2 - 1)
    listenReactor, err := goev.NewReactor(goev.EvPollNum(1))
    if err != nil {
        panic(err.Error())
    }
    connReactor, err := goev.NewReactor(goev.EvPollNum(runtime.NumCPU()*3/2))
    if err != nil {
        panic(err.Error())
    }
    _, err = goev.NewAcceptor(listenReactor, ":8080", func() goev.EvHandler {
        return new(Conn)
    })
    if err != nil {
        panic(err.Error())
    }
    go func() {
        if err = listenReactor.Run(); err != nil {
            panic(err.Error())
        }
    }()
    if err = connReactor.Run(); err != nil {
        panic(err.Error())
    }
}

启动文件功能

  • 初始化反应堆: 使用 goev.NewReactor 初始化反应堆实例。
  • 创建 Acceptor: 使用 goev.NewAcceptor 创建监听器,监听指定端口。
  • 启动反应堆: 调用 Run 方法启动反应堆,开始处理事件。

3. 项目配置文件介绍

Goev 项目没有传统的配置文件,大部分配置通过代码中的参数进行设置。例如,反应堆的数量、监听端口等都可以在代码中直接配置。

配置示例

listenReactor, err := goev.NewReactor(goev.EvPollNum(1))
connReactor, err := goev.NewReactor(goev.EvPollNum(runtime.NumCPU()*3/2))

配置说明

  • EvPollNum: 设置反应堆的数量,通常根据 CPU 核心数进行配置。
  • 监听端口: 通过 goev.NewAcceptor 的参数设置监听端口。

通过以上配置,可以灵活地调整 Goev 项目的运行参数,以适应不同的应用场景。

goev goev is a lightweight, concise i/o event demultiplexer implementation in Go goev 项目地址: https://gitcode.com/gh_mirrors/go/goev

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邢郁勇Alda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值