源码实践_实现一个mqtt(2)
2021/9/3 17:07:26
本文主要是介绍源码实践_实现一个mqtt(2),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 源码实践_实现一个mqtt(2)
- topic和tcp连接的关系
- btree
- topic节点代码
源码实践_实现一个mqtt(2)
订阅, 发布, tcp数据结构选型
topic和tcp连接的关系
-
查找topic快
此时没考虑topic匹配,只是考虑定义好直接写死
-
发送消息快
让topic维护tcp,找到topic,官博即可
btree
之前看过etcd,里面的内存数据结构用到的"github.com/google/btree"
,我也用,测试还比较快,支持节点是接口,实现Less即可
topic节点代码
type Topic struct { Mux sync.Mutex Name string Conn map[string]net.Conn Hash int64 } func NewTopic(name string, conn map[string]net.Conn) *Topic { t := &Topic{ Name: name, Conn: conn, } t.CalcHash() return t } // Less btree的元素实现了Less接口 // 注意下面需要具体的数字进行排序 func (t *Topic) Less(b btree.Item) bool { return t.Hash < b.(*Topic).Hash } // CalcHash 计算hash值 // 简单的hash字符串唯一操作运算,每个不同topic的二进制数字和大部分不一样 // todo: 以后找个合适的hash func (t *Topic) CalcHash() { b := []byte(t.Name) for _, v := range b { t.Hash += int64(v) } }
这篇关于源码实践_实现一个mqtt(2)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-08「布道师系列文章」解析 AutoMQ 对象存储中的文件存储格式
- 2024-05-08「布道师系列文章」小红书黄章衡:AutoMQ Serverless 基石-秒级分区迁移
- 2024-05-08AutoMQ 系统测试体系揭秘
- 2024-03-14AutoMQ 携手阿里云共同发布新一代云原生 Kafka,帮助得物有效压缩 85% Kafka 云支出!
- 2024-02-22kafka partitioner
- 2024-01-24AutoMQ生态集成 - 将数据从 AutoMQ Kafka 导入 RisingWave 数据库
- 2024-01-13消息队列面试题:为什么要使用消息队列?
- 2024-01-08"基于 XHAMQ 的消息队列系统实现"
- 2023-11-24全网最全图解Kafka适用场景
- 2023-09-19RabbitMQ 消息应答