首页 > 其他 > 详细

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

时间:2021-09-03 23:47:29      阅读:29      评论:0      收藏:0      [点我收藏+]

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

原文:https://www.cnblogs.com/maomaomaoge/p/15223452.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!