3

在一个 go 程序中,我想同时运行两个 Web 服务器,
显然它们将在两个不同的端口(以及必要时
的 IP 地址)上提供服务,问题出在调用http.handle,当我尝试为 ' 注册处理程序时/' 对于第二个服务器,它恐慌并说已经有一个与'/'关联的处理程序,
我想我需要创建一个多路复用器,DefaultServeMux我尝试使用它gorillaMux但无法弄清楚,

在同一个程序/进程中运行两个 Web 服务器是否存在根本性错误。

更清楚地说,两个 Web 服务器中的一个用作常规 Web 服务器,我需要第二个用作 RPC 服务器,以便在集群的不同节点上运行的程序实例之间进行通信,

编辑:为了更清楚一点,这不是实际代码,而是要点

myMux := http.NewServeMux()
myMux.HandleFunc("/heartbeat", heartBeatHandler)

http.Handle("/", myMux)

server := &http.Server{
    Addr:    ":3400",
    Handler: myMux,
}
go server.ListenAndServe()

gorillaMux := mux.NewRouter()
gorillaMux.HandleFunc("/", indexHandler)
gorillaMux.HandleFunc("/book", bookHandler)

http.Handle("/", gorillaMux)

server := &http.Server{
    Addr:    ":1234",
    Handler: gorillaMux,
}

log.Fatal(server.ListenAndServe())
4

1 回答 1

7

我认为你只需要删除这些行:

http.Handle("/", myMux)
http.Handle("/", gorillaMux)

所有路由都已在 myMux 和 gorillaMux 中定义。

检查这个:http ://play.golang.org/p/wqn4CZ01Z6

于 2014-01-17T11:09:19.113 回答