网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

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命令怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


分享文章:nsqlookupd中tcpServer命令怎么用
URL标题:http://bjjierui.cn/article/igjhcp.html

其他资讯