【问题标题】:Running two web server at the same time in one go programm在一个 go 程序中同时运行两个 Web 服务器
【发布时间】:2014-02-06 14:57:21
【问题描述】:

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

【问题讨论】:

  • 你能提供你使用的代码吗?

标签: go webserver mux gorilla servemux


【解决方案1】:

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

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

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

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

【讨论】:

  • 真的吗?!谢谢,太尴尬了,我以为是向服务器注册多路复用器而不是服务“/”
  • 我会更新您的示例,使其更加惯用;特别是需要检查错误,很难看出第一台服务器和第二台服务器之间的区别。做这样的事情最直接的方法可能是创建两个独立的函数,每个服务器一个,注册然后服务(检查错误!)。 Main 然后以两个 go 语句和一个终端 select{} 结束。
  • @kyle-lemons 我同意你的观点,甚至更多,我认为 Go 需要更多 最佳实践 示例,这些示例可以教如何以高质量的方式做事.
猜你喜欢
  • 2019-08-03
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多