七叶笔记 » golang编程 » golang 服务器实现getty(dubbo-go底层io引擎)实现之架构篇

golang 服务器实现getty(dubbo-go底层io引擎)实现之架构篇

何为getty

getty 一个类似于 netty 的异步io框架

由于最近在学习dubbo-go, 了解底层用getty 作为网络框架,有必要了解一下实现原理,下面梳理一下整个工作的流程,作为记录已备后用

运行流程如下

  1. 启动服务器, 获取 server 对象
  2. runTcpEventLoop 监听网络请求,这一步骤传入网络事件监听的hander
  3. accept 获取session
  4. 执行session.run 函数处理本连接请求

过程具体分解

在第二步骤主要事件有

  • OnMessage, 接收到请求,获取完整数据包后,将调用这一方法,可以处理业务,并将数据回写
  • OnCron 主要用作心跳处理,可以得到本连接的存活时间,可以依此做处理
  • OnOpen 打开连接时回调,可以保存连接,生成连接池等等
  • OnError 报错调用
  • OnClose 关闭连接时回调

另外还在再次传入数据封包解包处理程序,这样可以由客户端决定数据的处理,增加灵活性

在第四步骤中主要时间有

  1. 记录开启线程数
  2. 监控网络请求
  3. 如果出错,打开进程数减一
  4. 如果一直没有数据包生成,会调用onCron 方法来处理心跳
  5. 处理接收的请求数据
  6. 读取数据,调取解包程序(外部传入,有业务方调用), 解包完成的包, 调用业务方onMessage 方法,在onMessage中可以处理业务逻辑,然后在给出相应数据包,增加接收包数记录

精巧处理分析

连接事件处理

通过select + channel 方式来处理走心跳流程还是正常读数据流程

相关文章