何为getty
getty 一个类似于 netty 的异步io框架
由于最近在学习dubbo-go, 了解底层用getty 作为网络框架,有必要了解一下实现原理,下面梳理一下整个工作的流程,作为记录已备后用
运行流程如下
- 启动服务器, 获取 server 对象
- runTcpEventLoop 监听网络请求,这一步骤传入网络事件监听的hander
- accept 获取session
- 执行session.run 函数处理本连接请求
过程具体分解
在第二步骤主要事件有
- OnMessage, 接收到请求,获取完整数据包后,将调用这一方法,可以处理业务,并将数据回写
- OnCron 主要用作心跳处理,可以得到本连接的存活时间,可以依此做处理
- OnOpen 打开连接时回调,可以保存连接,生成连接池等等
- OnError 报错调用
- OnClose 关闭连接时回调
另外还在再次传入数据封包解包处理程序,这样可以由客户端决定数据的处理,增加灵活性
在第四步骤中主要时间有
- 记录开启线程数
- 监控网络请求
- 如果出错,打开进程数减一
- 如果一直没有数据包生成,会调用onCron 方法来处理心跳
- 处理接收的请求数据
- 读取数据,调取解包程序(外部传入,有业务方调用), 解包完成的包, 调用业务方onMessage 方法,在onMessage中可以处理业务逻辑,然后在给出相应数据包,增加接收包数记录
精巧处理分析
通过select + channel 方式来处理走心跳流程还是正常读数据流程