今天来说说NSQD中的TCP 服务,TCP服务的任务包括接收/处理/响应发布、消费、延时、消费确认等命令。
详细流程参考 https://blog.csdn.net/H_L_S/article/details/104709619 中的逻辑流程图。
主要代码文件:
1.internal/protocol/tcp_server.go,该文件主要是启动一个服务监听,循环接收客户端连接,并且将conn,交由一个goroutine ,执行指定Handle 。
func TCPServer(listener net.Listener, handler TCPHandler, logf lg.AppLogFunc) error {
var wg sync.WaitGroup
...
for {
//接收新连接
clientConn, err := listener.Accept()
....
wg.Add(1)
//启动goroutin 处理clientConn
go func() {
handler.Handle(clientConn)
wg.Done()
}()
}
wg.Wait()
return nil
}
2.nsqd/tcp.go,该文件主要处理conn的连接。Handle函数主要两件事,一是协议版本验证,二是如果协议没有问题,启动IOLoop,处理客户端请求,比如发布,消费,消费确认等。
type tcpServer struct {
ctx *context //NSQD 实例
conns sync.Map //并发安全的MAP
}
func (p *tcpServer) Handle(clientConn net.Conn) {
buf := make([]


332

被折叠的 条评论
为什么被折叠?



