文档章节

nsq nsqd源码1

昏鸦
 昏鸦
发布于 2014/03/25 16:12
字数 322
阅读 181
收藏 1

1 启动类: main.go

 

利用:flag.NewFlagSet 解析传递的参数

'注册系统的信号量

exitChan := make(chan int)

    signalChan := make(chan os.Signal, 1)

    go func() {

        <-signalChan

        exitChan <- 1

    }()

    signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)

 

调用optios.go 做默认的参数  NewNSQDOptions

 

启动server的服务: nsqd := NewNSQD(opts)

 

加载硬盘上的数据:nsqd.LoadMetadata()

    err := nsqd.PersistMetadata()

 

nsqd.Main()

执行lookup 服务的初始化工作

n.waitGroup.Wrap(func() { n.lookupLoop() })

 

n.waitGroup.Wrap(func() { util.TCPServer(n.tcpListener, tcpServer) }) 开启tcp的监听服务

 

n.waitGroup.Wrap(func() { util.HTTPServer(n.httpListener, httpServer) }) 开始http的监听服务

 

main.go 的流程走完

 

接下来看看有客户端连接以后的服务:

tcp.go

     (p *tcpServer) Handle(clientConn net.Conn)

                   一系列的校验。。。

         调用:ProtocolV2. IOLoop

                            client := NewClientV2(clientID, conn, p.context) 初始化客户端

                                               go p.messagePump(client) 客户select服务

response, err := p.Exec(client, params)  执行具体的客户端操作

func (p *ProtocolV2) Exec(client *ClientV2, params [][]byte) ([]byte, error) {
    switch {
    case bytes.Equal(params[0], []byte("FIN")):
        return p.FIN(client, params)
    case bytes.Equal(params[0], []byte("RDY")):
        return p.RDY(client, params)
    case bytes.Equal(params[0], []byte("REQ")):
        return p.REQ(client, params)
    case bytes.Equal(params[0], []byte("PUB")):
        return p.PUB(client, params)
    case bytes.Equal(params[0], []byte("MPUB")):
        return p.MPUB(client, params)
    case bytes.Equal(params[0], []byte("NOP")):
        return p.NOP(client, params)
    case bytes.Equal(params[0], []byte("TOUCH")):
        return p.TOUCH(client, params)
    case bytes.Equal(params[0], []byte("IDENTIFY")):
        return p.IDENTIFY(client, params)
    case bytes.Equal(params[0], []byte("SUB")):
        return p.SUB(client, params)
    case bytes.Equal(params[0], []byte("CLS")):
        return p.CLS(client, params)
    }
    return nil, util.NewFatalClientErr(nil, "E_INVALID", fmt.Sprintf("invalid command %s", params[0]))
}



© 著作权归作者所有

共有 人打赏支持
上一篇: nsq 问题
下一篇: python 24小时排行
昏鸦
粉丝 7
博文 182
码字总数 59043
作品 0
程序员
私信 提问
去中心化分布式服务实时消息平台-NSQ

NSQ是一个基于Go语言的开源的分布式实时消息平台 NSQ可用于大规模系统的实时消息服务,它的设计目标是为在分布式环境下提供一个强大的去除中心化的分布式服务架构,可以每天处理数以亿计的实...

kiwisoft
2016/10/27
22
0
NSQ 0.3.1 发布,开源高性能消息系统

NSQ 0.3.1 发布了,该版本包含一些小 bug 修复和新特性。改进了 nsq_stat 和 nsq_to_file 助手应用(支持 #ephemeral 主题)。此外 TLS 选项继续改进对 --tls-min-version 的支持以及 TLS_FA...

oschina
2015/01/27
3.9K
5
游戏服务器骨架--gonet2

欢迎使用 gonet/2是新一代游戏服务器骨架,基于go语言开发,采用了先进的http/2作为服务器端主要通信协议,以microservice作为主要思想进行架构,采用docker作为服务发布手段。相比第一代gon...

xtaci
2015/10/15
3.2K
0
nsq 使用笔记

nsqd 出现问题 https://github.com/nsqio/nsq/issues/691 https://github.com/nsqio/nsq/issues/506 nsqadmin 在访问的时候报错误 这个错误就是DNS访问出了问题。 解决方法: 使用 -broadca...

solate
2016/11/01
137
0
nsq在docker部署后nsqadmin无法resolve所有nsqd的host的解决方法

nsq在docker部署后nsqadmin无法resolve所有nsqd的host的解决方法 疯子的自留地2017-12-173 阅读 docker方法部署 问题 最开始部署 nsq 的时候是直接在云主机上直接部署的,但是作为一个牛逼的程...

疯子的自留地
2017/12/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

numpy常用操作

水平合并数组 import numpy as npa = [1,2,3]b = [4,5,6]np.hstack((a,b))# array([1, 2, 3, 4, 5, 6])c = [a,['a','b','c']]d = [b,['d','e','f']]np.hstack((c,d))#array([['1'......

datadev_sh
12分钟前
0
0
四种检测异常值的常用技术简述

摘要: 本文介绍了异常值检测的常见四种方法,分别为Numeric Outlier、Z-Score、DBSCAN以及Isolation Forest 在训练机器学习算法或应用统计技术时,错误值或异常值可能是一个严重的问题,它们...

阿里云官方博客
15分钟前
0
0
如何删除本地服务

Microsoft Windows [版本 10.0.17134.407] (c) 2018 Microsoft Corporation。保留所有权利。 C:\WINDOWS\system32>SC 描述: SC 是用来与服务控制管理器和服务进行通信 的命令行程序。 用法:...

码农屌丝
28分钟前
1
0
Web安全学习规划

一名合格的Web安全工程师是要具备很多的知识点,不但要对网站架构熟悉,通讯协议,测试流程与测试工具使用,漏洞利用脚本编写,还有需要经验的积累等。 互联网进入下半场,竞争越发的激烈,能...

Linux就该这么学
32分钟前
1
0
爬虫Requests基本使用

Requests基本使用 安装 pip install requests 一、Requests模块请求 获取网页(不带参数) r = requests.get('http://www.chinahufei.com')r = requests.post('http://www.chinahufei.com')......

chinahufei
33分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部