37 lines
855 B
Go
37 lines
855 B
Go
|
|
package main
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
"log"
|
||
|
|
"net/http"
|
||
|
|
)
|
||
|
|
|
||
|
|
func main() {
|
||
|
|
ports := []string{"18081", "18082", "18083"}
|
||
|
|
|
||
|
|
for _, port := range ports {
|
||
|
|
go startEchoServer(port)
|
||
|
|
}
|
||
|
|
|
||
|
|
// Block main goroutine
|
||
|
|
select {}
|
||
|
|
}
|
||
|
|
|
||
|
|
func startEchoServer(port string) {
|
||
|
|
mux := http.NewServeMux()
|
||
|
|
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||
|
|
msg := fmt.Sprintf("Response from Backend Server [Port: %s] | Requested Path: %s", port, r.URL.Path)
|
||
|
|
// Print to console so we can see which server handled it
|
||
|
|
log.Printf("[Port %s] Handled request for %s", port, r.URL.Path)
|
||
|
|
|
||
|
|
w.Header().Set("Content-Type", "text/plain")
|
||
|
|
w.WriteHeader(http.StatusOK)
|
||
|
|
w.Write([]byte(msg + "\n"))
|
||
|
|
})
|
||
|
|
|
||
|
|
log.Printf("Starting Echo Server on :%s", port)
|
||
|
|
if err := http.ListenAndServe(":"+port, mux); err != nil {
|
||
|
|
log.Fatalf("Server on %s failed: %v", port, err)
|
||
|
|
}
|
||
|
|
}
|