千家信息网

nsqlookupd中tcpServer命令怎么用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍nsqlookupd中tcpServer命令怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、tcpServer1、case "PING": 健康检查更新
千家信息网最后更新 2026年11月03日nsqlookupd中tcpServer命令怎么用

这篇文章主要介绍nsqlookupd中tcpServer命令怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!



一、tcpServer


1、case "PING": 健康检查


更新 client.peerInfo.lastUpdate 为 time.Now().UnixNano()


回复 "OK"




2、case "IDENTIFY": 身份认证,client 注册(ip,port等)


此命令,每个 client 只发送一次。


server 继续从 conn 读取1个 int32,这个数字表明 body 长度

err = binary.Read(reader, binary.BigEndian, &bodyLen)


继续从 conn 读取上面获取长度的字节流,原始报文是 json 格式


peerInfo := PeerInfo{id: client.RemoteAddr().String()}

err = json.Unmarshal(body, &peerInfo)


解码成 PeerInfo;同时 验证字段是否完整,设置 lateUpdate


下一步就是要把 producer 的信息保存起来,这块涉及一个非常重要的 struct,在 NSQLookupd 对其有一个指针。


type NSQLookupd struct {

// ............

DB *RegistrationDB

}


type RegistrationDB struct {

sync.RWMutex // 锁用来协调多个协程的访问

registrationMap map[Registration]Producers // producer slice

}


// 下面这句是非常重要的注册 添加生产者,注意到 Registration 只有第一个字段有值

// 添加时会做判断,根据 peerInfo.Id,也就是 client 的 ip 地址

p.context.nsqlookupd.DB.AddProducer(Registration{"client", "", ""}, &Producer{peerInfo: client.peerInfo})


注意其中锁的使用,sync.RWMutex 默认初始值就可以直接使用


r.Lock()

defer r.Unlock() // 方法结束时,确保释放锁


最后一步把 nsqlookupd 主机的信息编码,发送给 client




3、case "REGISTER": topic,channel 注册


client 首先要 IDENTITY,即身份认证


// channel 注册

key := Registration{"channel", topic, channel}

p.context.nsqlookupd.DB.AddProducer(key, &Producer{peerInfo: client.peerInfo})


// topic 注册

key := Registration{"topic", topic, ""}

p.context.nsqlookupd.DB.AddProducer(key, &Producer{peerInfo: client.peerInfo})


注意 key 和 client 认证时候的不同


给 client 返回 "OK"




4、case "UNREGISTER": 注销 topic, channel


这个地方有个小细节,不明白作者为什么要创建新的 Producer slice


cleaned := make(Producers, 0)

for _, producer := range producers {

if producer.peerInfo.id != id {

cleaned = append(cleaned, producer)

} else {

removed = true

}

}

// Note: this leaves keys in the DB even if they have empty lists

r.registrationMap[k] = cleaned

以上是"nsqlookupd中tcpServer命令怎么用"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

命令 认证 重要 信息 内容 字段 篇文章 身份 身份认证 长度 不同 原始 健康 主机 也就是 价值 作者 兴趣 只有 同时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 咖啡 伟宏互联网科技 亿人帮互联网科技有限公司 互联网 的科技创新 百单互联网科技有限公司 时间互联网络科技 奔汉互联网科技 镁科技互联网资讯平台 互联网科技博主是什么意思 成都铂石互联网科技做什么的 成都互联网科技公司工作好不好 西安小鹰速贷互联网科技有限公司 众安科技工业互联网合作 上海科技产业互联网平台 山东子淼互联网科技有限公司 互联网科技股为什么大涨 广州互联网高科技取餐柜 上海万顺科技互联网有限公司招聘 科技信息时代互联网发展 株洲百竞科技的互联网营销顾问 广州大一互联网络科技有限公司 科技信息互联网 远拓互联网科技 山东吉时兔互联网科技有限公司 武汉健翔互联网络科技有限公司 呼和浩特新华互联网科技学院 新氧科技和美国互联网有关系吗 萌小萌互联网科技河南有限公司 互联网科技大佬云集 重庆科技产业互联网有哪些
0