在做物联网设备对接中,我们常常要用到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