在一个程序中同时运行两个Web服务器

时间:2014-01-17 10:12:59

标签: go webserver mux gorilla servemux

在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())

1 个答案:

答案 0 :(得分:7)

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

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

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

请检查:http://play.golang.org/p/wqn4CZ01Z6