Forward-Proxy-vs-Reverse-Proxy / 正向代理与反向代理的区别
type Convert struct { Req_type string // (host / location) Backends string Address string Protocol string Weight float32 Cur_weight float32 }
-
我在globalvar里面定义了两个全局变量:
globalvar.go
var Cache map[string][]models.Convert var L_Lock *sync.RWMutex
-
轮询算法实现
polling.go
func GetNextServerConvert(host string) (convert models.Convert, err error){ globalvar.L_Lock.Lock() defer globalvar.L_Lock.Unlock() var converts []models.Convert converts = globalvar.Cache[host] if converts == nil || len(converts) == 0 { converts = GetConvertsByHost(host) if converts == nil || len(converts) == 0 { return convert, errors.New("not found convert can handle request from host:" + host) } } globalvar.Cache[host] = converts convert = getNextServerConvert(converts, len(converts)) globalvar.Cache[host] = converts return convert, nil }
剩下的回头在写......