NSQ 源码分析之NSQD--ProtocolV2

本文聚焦于NSQD的TCPServer中的IOLoop函数,阐述其如何处理客户端命令及进行心跳检查、消息发布等核心任务。详细流程可参照链接中的逻辑流程图,涉及关键代码文件包括protocol_v2.go中的IOLoop和messagePump函数。IOLoop主要包含messagePump的心跳和消息处理,以及Exec的命令执行处理。下篇将深入探讨IOLoop的Exec相关函数。
摘要由CSDN通过智能技术生成

今天来说说NSQD.TCPServer中的核心函数IOLoop的具体实现,IOLoop主要的工作是接收和响应客户的命令。同时开启messagePump goroutine 进行心跳检查,给订阅者发生消息等操作。

详细流程参考 https://blog.csdn.net/H_L_S/article/details/104709619 中的逻辑流程图。

主要代码文件:

1.nsqd/protocol_v2.go

IOLoop函数

func (p *protocolV2) IOLoop(conn net.Conn) error {
	....
    //客户端实例化
	clientID := atomic.AddInt64(&p.ctx.nsqd.clientIDSequence, 1)
	client := newClientV2(clientID, conn, p.ctx)
	p.ctx.nsqd.AddClient(client.ID, client)
    ...
    //messagePump启动信号,当 messagePump初始化完成,才能开始进行命令处理
	messagePumpStartedChan := make(chan bool)
	go p.messagePump(client, messagePumpStartedChan)
	<-messagePumpStartedChan

	for {
        //net.Conn 读超时设置
		if client.HeartbeatInterval > 0 {
			client.SetReadDeadline(time.Now().Add(client.HeartbeatInterval * 2))
		} else {
			client.SetReadDeadline(zeroTime)
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值