在做物联网设备对接中,我们常常要用到TCP
长连接来交互数据,而Golang
的设计理念,天生适合做TCP
连接的处理。
今天推荐一个开源包 github.com/shootingfans/socket 来更方便的处理TCP
连接操作。
这个包中,首先将处理连接分为两种
AsyncProcessor
异步处理器SyncProcessor
同步处理器
其中异步处理器会在处理连接时,分为读协程、写协程以及工作协程,同时工作协程是可以配置多个的,数据流转为
连接 -> 读取协程 --Worker通道--> 多个Worker处理 --> 调度器 --写通道--> 写协程--> 连接
调度器则作为一个协调器使用,调取内存取了连接、写入通道等,其结构定义如下
// Scheduler
// 调度器
type Scheduler struct {
// 连接
Conn *Connection
// 上下文
Ctx context.Context
// 写入通道
WriteChan chan<- []byte
rw sync.RWMutex
values map[interface{}]interface{}
}
同时调度器还提供了存、读、删,以及自增、自减几个功能用于在多个Worker
内共享数据
Connection
则对net.Conn
做了包装,主要为了记录读取、写入字节数、总连接时长等
创建一个Handler,实现了WorkHandler
这个接口,即可轻松处理TCP
连接数据,其他几个可选实现的Handler
如下
ConnectedHandler
连接建立时调用ClosedHandler
连接断开时调用ErrorHandler
在读取错误或写入错误时调用FinishHandler
在写入完成时调用
通过go get 获取
go get -v github.com/shootingfans/socket
目前迭代到v1.0.2
版本,如果大家有问题可以去github上提交issue