我想在一个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服务器实例并为它们添加处理程序?
答案 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)
并以另一种方式处理错误。