Запуск двух веб-серверов одновременно в одной программе

В программе 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

Другие вопросы по тегам