Skip to content

Instantly share code, notes, and snippets.

@fernandomalmeida
Forked from filewalkwithme/main.go
Last active December 3, 2020 01:07
Show Gist options
  • Save fernandomalmeida/44192cb0d1c09a5070f4ba5ba8215618 to your computer and use it in GitHub Desktop.
Save fernandomalmeida/44192cb0d1c09a5070f4ba5ba8215618 to your computer and use it in GitHub Desktop.
Listening multiple ports on golang http servers, closing only one port
package main
import (
"context"
"fmt"
"net/http"
"time"
)
func main() {
finish := make(chan bool)
server8001 := http.NewServeMux()
server8001.HandleFunc("/foo", foo8001)
server8001.HandleFunc("/bar", bar8001)
server8002 := http.NewServeMux()
server8002.HandleFunc("/foo", foo8002)
server8002.HandleFunc("/bar", bar8002)
httpServer8001 := http.Server{
Addr: ":8001",
Handler: server8001,
}
httpServer8002 := http.Server{
Addr: ":8002",
Handler: server8002,
}
go func() {
fmt.Println("Listening on port 8001")
httpServer8001.ListenAndServe()
}()
go func() {
fmt.Println("Listening on port 8002")
httpServer8002.ListenAndServe()
}()
go func() {
time.Sleep(10 * time.Second)
fmt.Println("shutdown server on port 8002")
httpServer8002.Shutdown(context.TODO())
}()
<-finish
}
func foo8001(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Listening on 8001: foo "))
}
func bar8001(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Listening on 8001: bar "))
}
func foo8002(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Listening on 8002: foo "))
}
func bar8002(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Listening on 8002: bar "))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment