func (n *NSQD) Main() { var httpListener net.Listener var httpsListener net.Listener ctx := &context{n} tcpListener, err := net.Listen("tcp", n.getOpts().TCPAddress) if err != nil { n.logf("FATAL: listen (%s) failed - %s", n.getOpts().TCPAddress, err) os.Exit(1) } n.Lock() n.tcpListener = tcpListener n.Unlock() tcpServer := &tcpServer{ctx: ctx} n.waitGroup.Wrap(func() { protocol.TCPServer(n.tcpListener, tcpServer, n.getOpts().Logger) }) if n.tlsConfig != nil && n.getOpts().HTTPSAddress != "" { httpsListener, err = tls.Listen("tcp", n.getOpts().HTTPSAddress, n.tlsConfig) if err != nil { n.logf("FATAL: listen (%s) failed - %s", n.getOpts().HTTPSAddress, err) os.Exit(1) } n.Lock() n.httpsListener = httpsListener n.Unlock() httpsServer := newHTTPServer(ctx, true, true) n.waitGroup.Wrap(func() { http_api.Serve(n.httpsListener, httpsServer, "HTTPS", n.getOpts().Logger) }) } httpListener, err = net.Listen("tcp", n.getOpts().HTTPAddress) if err != nil { n.logf("FATAL: listen (%s) failed - %s", n.getOpts().HTTPAddress, err) os.Exit(1) } n.Lock() n.httpListener = httpListener n.Unlock() httpServer := newHTTPServer(ctx, false, n.getOpts().TLSRequired == TLSRequired) n.waitGroup.Wrap(func() { http_api.Serve(n.httpListener, httpServer, "HTTP", n.getOpts().Logger) }) n.waitGroup.Wrap(func() { n.queueScanLoop() }) n.waitGroup.Wrap(func() { n.idPump() }) n.waitGroup.Wrap(func() { n.lookupLoop() }) if n.getOpts().StatsdAddress != "" { n.waitGroup.Wrap(func() { n.statsdLoop() }) } }
func (l *NSQLookupd) Main() { ctx := &Context{l} tcpListener, err := net.Listen("tcp", l.opts.TCPAddress) if err != nil { l.logf("FATAL: listen (%s) failed - %s", l.opts.TCPAddress, err) os.Exit(1) } l.Lock() l.tcpListener = tcpListener l.Unlock() tcpServer := &tcpServer{ctx: ctx} l.waitGroup.Wrap(func() { protocol.TCPServer(tcpListener, tcpServer, l.opts.Logger) }) httpListener, err := net.Listen("tcp", l.opts.HTTPAddress) if err != nil { l.logf("FATAL: listen (%s) failed - %s", l.opts.HTTPAddress, err) os.Exit(1) } l.Lock() l.httpListener = httpListener l.Unlock() httpServer := newHTTPServer(ctx) l.waitGroup.Wrap(func() { http_api.Serve(httpListener, httpServer, "HTTP", l.opts.Logger) }) }
func (n *NSQAdmin) Main() { httpListener, err := net.Listen("tcp", n.opts.HTTPAddress) if err != nil { n.logf("FATAL: listen (%s) failed - %s", n.opts.HTTPAddress, err) os.Exit(1) } n.Lock() n.httpListener = httpListener n.Unlock() httpServer := NewHTTPServer(&Context{n}) n.waitGroup.Wrap(func() { http_api.Serve(n.httpListener, http_api.CompressHandler(httpServer), "HTTP", n.opts.Logger) }) n.waitGroup.Wrap(func() { n.handleAdminActions() }) }
func (n *NSQD) Main() { var httpListener net.Listener var httpsListener net.Listener ctx := &context{n} //监听请求(0.0.0.0:4150) TCP tcpListener, err := net.Listen("tcp", n.getOpts().TCPAddress) if err != nil { n.logf("FATAL: listen (%s) failed - %s", n.getOpts().TCPAddress, err) os.Exit(1) } n.Lock() n.tcpListener = tcpListener n.Unlock() tcpServer := &tcpServer{ctx: ctx} n.waitGroup.Wrap(func() { //调用监听 protocol.TCPServer(n.tcpListener, tcpServer, n.getOpts().Logger) }) //监听请求 HTTPS if n.tlsConfig != nil && n.getOpts().HTTPSAddress != "" { httpsListener, err = tls.Listen("tcp", n.getOpts().HTTPSAddress, n.tlsConfig) if err != nil { n.logf("FATAL: listen (%s) failed - %s", n.getOpts().HTTPSAddress, err) os.Exit(1) } n.Lock() n.httpsListener = httpsListener n.Unlock() httpsServer := newHTTPServer(ctx, true, true) n.waitGroup.Wrap(func() { http_api.Serve(n.httpsListener, httpsServer, "HTTPS", n.getOpts().Logger) }) } //监听请求 HTTP httpListener, err = net.Listen("tcp", n.getOpts().HTTPAddress) if err != nil { n.logf("FATAL: listen (%s) failed - %s", n.getOpts().HTTPAddress, err) os.Exit(1) } n.Lock() n.httpListener = httpListener n.Unlock() httpServer := newHTTPServer(ctx, false, n.getOpts().TLSRequired == TLSRequired) n.waitGroup.Wrap(func() { http_api.Serve(n.httpListener, httpServer, "HTTP", n.getOpts().Logger) }) //新建Ticker并且随时调整大小 包括channels n.waitGroup.Wrap(func() { n.queueScanLoop() }) //--??-- n.waitGroup.Wrap(func() { n.idPump() }) //保持与lookupd通信 n.waitGroup.Wrap(func() { n.lookupLoop() }) //统计进程的 UDP <addr>:<port> if n.getOpts().StatsdAddress != "" { //发送统计数据 n.waitGroup.Wrap(func() { n.statsdLoop() }) } }