diff --git a/go-socks-lb.yml.template b/go-socks-lb.yml.template index d1910d7..71932cc 100644 --- a/go-socks-lb.yml.template +++ b/go-socks-lb.yml.template @@ -2,6 +2,6 @@ proxy:{% for i in instances %} - url: "socks5://192.168.122.128:{{1080+i["idx"]}}" weight: {{i["weight"]}} {% end %} -load-balance-mode: "cached-shuffle" +load-balance-mode: "{{load_balance_mode}}" cache-max-length: 256 dynamic-weight-file: "{{dynamic_weight_fp}}" diff --git a/go-socks-lb/manager.go b/go-socks-lb/manager.go index 5f1f434..174ff2e 100644 --- a/go-socks-lb/manager.go +++ b/go-socks-lb/manager.go @@ -152,6 +152,8 @@ func (pm *ProxyManager) DescribeLoadBalanceMode() string { return fmt.Sprintf("sticky with maximum cache size of %d", pm.CacheMaxLength) } else if pm.LoadBalanceMode == cachedShuffle { return fmt.Sprintf("cached shuffle with maximum cache size of %d", pm.CacheMaxLength) + } else if pm.LoadBalanceMode == fallback { + return "fallback mode" } else { return "randomize every connection" } @@ -214,12 +216,10 @@ func (pm *ProxyManager) Get(addr string) (string, bool) { } else if pm.LoadBalanceMode == fallback { addr := "*" idx, ok := pm.Cache.Get(addr) - if ok { - idx = (idx + 1) % (len(pm.enabledIndics)) - } else { + if !ok { idx = pm.Chooser.Pick().(int) + pm.Cache.SetTrim(addr, idx, pm.CacheMaxLength) } - pm.Cache.SetTrim(addr, idx, pm.CacheMaxLength) return pm.Proxys[pm.enabledIndics[idx]].URL, true } else { idx := pm.Chooser.Pick().(int) diff --git a/o_manager.py b/o_manager.py index 5d4bba0..c68e294 100644 --- a/o_manager.py +++ b/o_manager.py @@ -41,10 +41,10 @@ class OManager: def generate_lb_cfg(self, load_balance_mode): lb_cfg_fp = os.path.join( - self.base_folder, "go-socks-lb.yml") + self.base_folder, f"go-socks-lb-{load_balance_mode}.yml") self.dynamic_weight_fp = os.path.join(self.base_folder, "weights.json") - with open(f"go-socks-lb-{load_balance_mode}.yml.template", "r") as template_f: + with open(f"go-socks-lb.yml.template", "r") as template_f: buf = template_f.read() template = Template(buf) items = {