Docker Swarm程式碼分析筆記(7)——建立Docker API server

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Docker Swarm manage函數的最後部分是建立Docker API server部分:

server := api.NewServer(hosts, tlsConfig)if c.Bool("replication") {    ......    setupReplication(c, cl, server, discovery, addr, leaderTTL, tlsConfig)} else {    server.SetHandler(api.NewPrimary(cl, tlsConfig, &statusHandler{cl, nil, nil}, c.GlobalBool("debug"), c.Bool("cors")))    cluster.NewWatchdog(cl)}log.Fatal(server.ListenAndServe())

Server結構體定義在api/server.go

type Server struct {    hosts      []string    tlsConfig  *tls.Config    dispatcher *dispatcher}

它的核心方法是ListenAndServe(),即為每個host起一個goroutine監聽並處理Docker client的串連請求。

func (s *Server) ListenAndServe() error {    chErrors := make(chan error, len(s.hosts))    for _, host := range s.hosts {        protoAddrParts := strings.SplitN(host, "://", 2)        if len(protoAddrParts) == 1 {            protoAddrParts = append([]string{"tcp"}, protoAddrParts...)        }        go func() {            log.WithFields(log.Fields{"proto": protoAddrParts[0], "addr": protoAddrParts[1]}).Info("Listening for HTTP")            var (                l      net.Listener                err    error                server = &http.Server{                    Addr:    protoAddrParts[1],                    Handler: s.dispatcher,                }            )            switch protoAddrParts[0] {            case "unix":                l, err = newUnixListener(protoAddrParts[1], s.tlsConfig)            case "tcp":                l, err = newListener("tcp", protoAddrParts[1], s.tlsConfig)            default:                err = fmt.Errorf("unsupported protocol: %q", protoAddrParts[0])            }            if err != nil {                chErrors <- err            } else {                chErrors <- server.Serve(l)            }        }()    }    for i := 0; i < len(s.hosts); i++ {        err := <-chErrors        if err != nil {            return err        }    }    return nil}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.