消息队列MQ

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

本文主要是介绍源码实践_实现一个mqtt(2),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • 源码实践_实现一个mqtt(2)
    • topic和tcp连接的关系
    • btree
    • topic节点代码

源码实践_实现一个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)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!