mirror of
https://github.com/nadoo/glider.git
synced 2025-02-23 17:35:40 +08:00
doc: add info for dh mode
This commit is contained in:
parent
035e15df5c
commit
2f239d60f1
@ -2,5 +2,6 @@ language: go
|
||||
|
||||
go:
|
||||
- "1.10.x"
|
||||
- "1.11.x"
|
||||
- master
|
||||
|
||||
|
@ -217,6 +217,7 @@ Available forward strategies:
|
||||
rr: Round Robin mode
|
||||
ha: High Availability mode
|
||||
lha: Latency based High Availability mode
|
||||
dh: destination hashing mode
|
||||
|
||||
Forwarder option scheme: FORWARD_URL#OPTIONS
|
||||
priority: set the priority of that forwarder, default:0
|
||||
|
1
conf.go
1
conf.go
@ -190,6 +190,7 @@ func usage() {
|
||||
fmt.Fprintf(os.Stderr, " rr: Round Robin mode\n")
|
||||
fmt.Fprintf(os.Stderr, " ha: High Availability mode\n")
|
||||
fmt.Fprintf(os.Stderr, " lha: Latency based High Availability mode\n")
|
||||
fmt.Fprintf(os.Stderr, " dh: destination hashing mode\n")
|
||||
fmt.Fprintf(os.Stderr, "\n")
|
||||
|
||||
fmt.Fprintf(os.Stderr, "Forwarder option scheme: FORWARD_URL#OPTIONS\n")
|
||||
|
@ -105,6 +105,7 @@ listen=socks5://:1080
|
||||
# Round Robin mode: rr
|
||||
# High Availability mode: ha
|
||||
# Latency based High Availability mode: lha
|
||||
# Destination Hashing mode: dh
|
||||
strategy=rr
|
||||
|
||||
|
||||
|
@ -105,7 +105,7 @@ func newDialer(fwdrs []*proxy.Forwarder, c *Config) *Dialer {
|
||||
}
|
||||
|
||||
for _, f := range fwdrs {
|
||||
f.AddHandler(d.OnStatusChanged)
|
||||
f.AddHandler(d.onStatusChanged)
|
||||
}
|
||||
|
||||
return d
|
||||
@ -128,6 +128,7 @@ func (d *Dialer) DialUDP(network, addr string) (pc net.PacketConn, writeTo net.A
|
||||
func (d *Dialer) NextDialer(dstAddr string) proxy.Dialer {
|
||||
d.mu.RLock()
|
||||
defer d.mu.RUnlock()
|
||||
|
||||
return d.nextForwarder(dstAddr)
|
||||
}
|
||||
|
||||
@ -158,12 +159,13 @@ func (d *Dialer) initAvailable() {
|
||||
}
|
||||
}
|
||||
|
||||
// OnStatusChanged will be called when fwdr's status changed
|
||||
func (d *Dialer) OnStatusChanged(fwdr *proxy.Forwarder) {
|
||||
// onStatusChanged will be called when fwdr's status changed
|
||||
func (d *Dialer) onStatusChanged(fwdr *proxy.Forwarder) {
|
||||
d.mu.Lock()
|
||||
defer d.mu.Unlock()
|
||||
|
||||
if fwdr.Enabled() {
|
||||
log.F("[strategy] %s changed from Disabled to Enabled ", fwdr.Addr())
|
||||
if fwdr.Priority() == d.Priority() {
|
||||
d.available = append(d.available, fwdr)
|
||||
} else if fwdr.Priority() > d.Priority() {
|
||||
@ -172,6 +174,7 @@ func (d *Dialer) OnStatusChanged(fwdr *proxy.Forwarder) {
|
||||
}
|
||||
|
||||
if !fwdr.Enabled() {
|
||||
log.F("[strategy] %s changed from Enabled to Disabled", fwdr.Addr())
|
||||
for i, f := range d.available {
|
||||
if f == fwdr {
|
||||
d.available[i], d.available = d.available[len(d.available)-1], d.available[:len(d.available)-1]
|
||||
@ -239,8 +242,7 @@ func (d *Dialer) check(i int) {
|
||||
}
|
||||
|
||||
func (d *Dialer) scheduleRR(dstAddr string) *proxy.Forwarder {
|
||||
idx := atomic.AddUint32(&d.index, 1) % uint32(len(d.available))
|
||||
return d.available[idx]
|
||||
return d.available[atomic.AddUint32(&d.index, 1)%uint32(len(d.available))]
|
||||
}
|
||||
|
||||
func (d *Dialer) scheduleHA(dstAddr string) *proxy.Forwarder {
|
||||
@ -263,6 +265,5 @@ func (d *Dialer) scheduleLHA(dstAddr string) *proxy.Forwarder {
|
||||
func (d *Dialer) scheduleDH(dstAddr string) *proxy.Forwarder {
|
||||
fnv1a := fnv.New32a()
|
||||
fnv1a.Write([]byte(dstAddr))
|
||||
idx := fnv1a.Sum32() % uint32(len(d.available))
|
||||
return d.available[idx]
|
||||
return d.available[fnv1a.Sum32()%uint32(len(d.available))]
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user