diff --git a/fuck/http_proxy.go b/fuck/http_proxy.go deleted file mode 100644 index eb4e9cd..0000000 --- a/fuck/http_proxy.go +++ /dev/null @@ -1,97 +0,0 @@ -package main - -import ( - "bytes" - "flag" - "fmt" - "io" - "log" - "net" - "os" - "strings" - "time" -) - -func main() { - var srcHost, agencyHost string - flag.StringVar(&srcHost, "srcHost", "", "srcHost") - flag.StringVar(&agencyHost, "agencyHost", "", "agencyHost") - flag.Parse() - if srcHost == "" || agencyHost == "" { - fmt.Fprintf(os.Stderr, "Fatal error: %s", "参数为空") - os.Exit(1) - } - //建立socket,监听端口 - netListen, err := net.Listen("tcp", srcHost) - CheckError(err) - defer netListen.Close() - - Log("Waiting for clients") - for { - conn, err := netListen.Accept() - //如果没有请求就一直等待 - if err != nil { - continue - } - if conn != nil { - Log(conn.RemoteAddr().String(), " tcp connect success") - go handleConnection(conn, agencyHost) //go 可以实现异步并发请求 - } - } -} - -//处理连接 -func handleConnection(conn net.Conn, agencyHost string) { - time.Sleep(10 * time.Millisecond) - buffer := ReceiveData(conn) - if len(buffer) > 1 { - arr := strings.Split(string(buffer), "\r\n") - if len(arr) > 1 { - arr[1] = "Host: " + agencyHost - newstr := strings.Join(arr, "\r\n") - SendAgencyHost([]byte(newstr), agencyHost, conn) - } - } - conn.Close() -} - -func SendAgencyHost(data []byte, host string, baseconn net.Conn) { - conn, _ := net.Dial("tcp", host) - conn.Write(data) - time.Sleep(10 * time.Millisecond) - bufferHead := ReceiveData(conn) - time.Sleep(10 * time.Millisecond) - bufferBody := ReceiveData(conn) - var buf bytes.Buffer - buf.Write(bufferHead) - buf.Write(bufferBody) - baseconn.Write(buf.Bytes()) - conn.Close() -} - -//接收数据统一方法 -func ReceiveData(conn net.Conn) []byte { - var buf bytes.Buffer - buffer := make([]byte, 8192) - for { - sizenew, err := conn.Read(buffer) - buf.Write(buffer[:sizenew]) - if err == io.EOF || sizenew < 8192 { - break - } - } - return buf.Bytes() -} - -//打印信息统一方法 -func Log(v ...interface{}) { - log.Println(v...) -} - -//执行错误处理方法 -func CheckError(err error) { - if err != nil { - fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) - os.Exit(1) - } -} diff --git a/main.go b/main.go index 90c55ee..0603ab3 100644 --- a/main.go +++ b/main.go @@ -7,14 +7,15 @@ import ( "log" ) -var RR = rr.NewWeightedRR(rr.RR_NGINX) + +var loadBalancer = NewWeightedRR(RR_NGINX) type handle struct { addrs []string } func (this *handle) ServeHTTP(w http.ResponseWriter, r *http.Request) { - addr := RR.Next().(string) + addr := loadBalancer.Next().(string) remote, err := url.Parse("http://" + addr) if err != nil { panic(err) @@ -26,14 +27,14 @@ func (this *handle) ServeHTTP(w http.ResponseWriter, r *http.Request) { func startServer() { //被代理的服务器host和port h := &handle{} - h.addrs = []string{"172.17.0.2:28080", "172.17.0.3:28080"} + h.addrs = []string{"127.0.0.1:3000"} w := 1 for _, e := range h.addrs { - RR.Add(e, w) + loadBalancer.Add(e, w) w++ } - err := http.ListenAndServe(":28080", h) + err := http.ListenAndServe(":9999", h) if err != nil { log.Fatalln("ListenAndServe: ", err) }