package main import ( "net/http" "net/url" "net/http/httputil" "log" ) var loadBalancer = NewWeightedRR(RR_NGINX) type handle struct { addrs []string } func (this *handle) ServeHTTP(w http.ResponseWriter, r *http.Request) { addr := loadBalancer.Next().(string) remote, err := url.Parse("http://" + addr) if err != nil { panic(err) } proxy := httputil.NewSingleHostReverseProxy(remote) proxy.ServeHTTP(w, r) } func startServer() { //被代理的服务器host和port h := &handle{} h.addrs = []string{"127.0.0.1:3000"} w := 1 for _, e := range h.addrs { loadBalancer.Add(e, w) w++ } err := http.ListenAndServe(":9999", h) if err != nil { log.Fatalln("ListenAndServe: ", err) } } func main() { startServer() }