MQTT 协议实现框架 -- Surgemq

我自己的github地址 fork from influxdata/surgemq

某些预先处理

更改 import 路径

首先为了更好的做本地测试,将所有原仓库中 github.com/surgemq/* 更改为相对地址(定义在 gopath 中) surgemq/*

防止出现大量预料之中的错误输出

让原有的判断是否到达数据流末尾重新生效,取消注销: if err != io.EOF {

断开连接后,出现错误:use of closed network connection

问题可见:issue 具体出现场景和原意相同,使用了一个已经关闭的网络连接,但是无法通过类似的逻辑判断出来: if err != io.EOF { 是 golang 本身对 net/net.go 中定义的 opError 未公开,因此只能通过字符串判断方式来确定这个报错,解决方案可见:PR

某些功能特性(待续)

作者博客 主要参照的文字 p.s. 写到这儿的时候在听云巴张虎 直播,他说开源的 MQTT 实现现在都不太好,达不到商用要求。sign ### 使用 ring buffer 来代替 chan 好处是可以用 peek 的方式来读取 net.Conn 中的内容来处理,避免进行大量的内存中数据拷贝,从而一定程度上解决效率问题 坏处是需要自己控制锁,po 主也是在上面踩了好多坑。

接下来准备改造 auth 模块,加入 OAuth 实现逻辑。