简介
阅读gnet相关知识。
gnet
不直接使用go net
里面的原有实现,而是直接去通过底层调用epoll
和kqueue
函数(这样简直就是将go当成c语言来写,直接调用系统级的函数。在Windows下没有将iocp
实现)。底层也是在模仿netty
、libvu
提供了事件驱动逻辑。
安装
go get -u github.com/panjf2000/gnet
原理
这里重点看一下常用的linux环境下的network的实现。
server
server_unix
数据结构
1 | type server struct { |
组织了服务器的基本元素。listener
监听对象;EventHandler
消息dispatch的;编码器;退出相关的组件;接受socket的事件处理;退出的逻辑。
acceptor
listener_unix.go
1 | type listener struct { |
类似于之前写c++的时的写法,将accept的socket挂载到epoll里面,等着有事件通知的时候,回调loopAccept函数。
reactor
reactor_default_linux.go