mirror of
https://github.com/razertory/Ginx.git
synced 2020-01-07 15:43:17 +00:00
45 lines
818 B
Go
45 lines
818 B
Go
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()
|
|
} |