源码实践_实现一个mqtt(2)

源码实践_实现一个mqtt(2)

订阅, 发布, tcp数据结构选型

topic和tcp连接的关系

  1. 查找topic快

    此时没考虑topic匹配,只是考虑定义好直接写死

  2. 发送消息快

    让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)

上一篇:PS打造漂亮的金色3D立体LOGO


下一篇:linux与Windows下的heap