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 项目的运行参数,以适应不同的应用场景。
3521

被折叠的 条评论
为什么被折叠?



