源码实践_实现一个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)
}
}