Запуск двух веб-серверов одновременно в одной программе
В программе Go я хочу запустить два веб-сервера одновременно,
очевидно, они будут обслуживать два разных порта (и IP-адреса, если это необходимо),
проблема с призывом к http.handle
, когда я пытаюсь зарегистрировать обработчик для '/' для второго сервера, он паникует и говорит, что уже есть обработчик, связанный с '/',
Я думаю, мне нужно создать мультиплексор в дополнение к DefaultServeMux
и я попытался сделать это с помощью gorillaMux
но не мог понять это,
Есть ли что-то принципиально не так с запуском двух веб-серверов в одной программе / процессе.
Чтобы было более понятно, один из двух веб-серверов используется в качестве обычного веб-сервера, мне нужен второй, который будет действовать как 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 ответ
Я думаю, вам просто нужно удалить эти строки:
http.Handle("/", myMux)
http.Handle("/", gorillaMux)
Все маршруты уже определены в myMux и gorillaMux.
Проверьте это: http://play.golang.org/p/wqn4CZ01Z6