HandleFunc中的http主机和端口信息

问题描述 投票:0回答:2

我试图启动多个http服务器,它们侦听同一程序包中的不同端口。在我的测试HandleFunc函数中,我需要打印主机和服务该请求的http服务器的信息端口。我该怎么办?

这是我的示例代码:

package main

import (
    "encoding/json"
    "flag"
    "log"
    "net/http"
    "os"

    "github.com/dineshgowda24/lb/backendserver/config"
)

func main() {
    c := flag.String("c", "config/config.json", "Please specify conf.json")
    flag.Parse()
    file, err := os.Open(*c)
    if err != nil {
        log.Fatal("Unable to open config file")
    }
    defer file.Close()
    decoder := json.NewDecoder(file)
    config := bconfig.BackendConfiguration{}
    err = decoder.Decode(&config)
    if err != nil {
        log.Fatal("Unable to decode conf.json file")
    }
    http.HandleFunc("/", handle)
    for _, s := range config.Servers {
        log.Printf("Started server at : %s : %s ", s.Host, s.Port)
        go func(host, port string) {
            if err := http.ListenAndServe(host+":"+port, nil); err != nil {
                log.Printf("Unable to start server at : %s : %s ", host, port)
            }
        }(s.Host, s.Port)
    }
    select {}
}

//How to get info of the server which served the request ??
func handle(w http.ResponseWriter, r *http.Request) {
    response := "I came from " //need to get server info
    w.Write([]byte(response))
    w.WriteHeader(http.StatusOK)
}
go httprequest httpserver go-http
2个回答
0
投票

您可以使用r.Host从请求主机获取它。参考:https://golang.org/pkg/net/http/#Request


0
投票

使用http.LocalAddrContextKey从请求上下文中检索服务器地址。

© www.soinside.com 2019 - 2024. All rights reserved.