LINUX.ORG.RU

Несколько http портов

 


0

1

Нашел в интернете пример как делать http сервер

https://astaxie.gitbooks.io/build-web-application-with-golang/en/03.2.html

package main

import (
    "fmt"
    "net/http"
    "strings"
    "log"
)

func sayhelloName(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()  // parse arguments, you have to call this by yourself
    fmt.Println(r.Form)  // print form information in server side
    fmt.Println("path", r.URL.Path)
    fmt.Println("scheme", r.URL.Scheme)
    fmt.Println(r.Form["url_long"])
    for k, v := range r.Form {
        fmt.Println("key:", k)
        fmt.Println("val:", strings.Join(v, ""))
    }
    fmt.Fprintf(w, "Hello astaxie!") // send data to client side
}

func main() {
    http.HandleFunc("/", sayhelloName) // set router
    err := http.ListenAndServe(":9090", nil) // set listen port
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}


Как запустить разные серверы на разных портах из одной программы?

Почему http.HandleFunc в единственном экземляре?

Можно передать sayhelloName сюда (":9090", nil) вместо nil, но как тогда назначить хендлер на '/' или на '/test/'?

Easy:

package main

import (
	"fmt"
	"net/http"
)

func main() {
	muxA := http.NewServeMux()
	muxA.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w, "root A")
	})
	muxA.HandleFunc("/test/", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w, "test A")
	})

	muxB := http.NewServeMux()
	muxB.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w, "root B")
	})
	muxB.HandleFunc("/test/", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w, "test B")
	})

	go http.ListenAndServe(":8060", muxA)
	go http.ListenAndServe(":8061", muxB)
	select {}
}

beastie ★★★★★ ()