如何在一个应用程序中创建许多http服务器?

时间:2015-07-02 05:34:31

标签: go

我想在一个golang应用中创建两个http服务器。例如:

    package main

    import (
    "io"
    "net/http"
)

func helloOne(w http.ResponseWriter, r *http.Request) {
    io.WriteString(w, "Hello world one!")
}

func helloTwo(w http.ResponseWriter, r *http.Request) {
    io.WriteString(w, "Hello world two!")
}

func main() {
    // how to create two http server instatce? 
    http.HandleFunc("/", helloOne)
    http.HandleFunc("/", helloTwo)
    go http.ListenAndServe(":8001", nil)
    http.ListenAndServe(":8002", nil)
}

如何创建两个http服务器实例并为它们添加处理程序?

1 个答案:

答案 0 :(得分:6)

您需要创建单独的http.ServeMux个实例。呼叫http.ListenAndServe(port, nil)使用DefaultServeMux(即共享)。这方面的文档在这里:http://golang.org/pkg/net/http/#NewServeMux

示例:

func main() {
    r1 := http.NewServeMux()
    r1.HandleFunc("/", helloOne)

    r2 := http.NewServeMux()
    r2.HandleFunc("/", helloTwo)

    go func() { log.Fatal(http.ListenAndServe(":8001", r1))}()
    go func() { log.Fatal(http.ListenAndServe(":8002", r2))}()
    select {}
}

使用log.Fatal包装服务器将导致程序在其中一个侦听器无法运行时退出。如果您希望程序在其中一个服务器无法启动或崩溃时保持运行,您可以err := http.ListenAndServe(port, mux)并以另一种方式处理错误。