1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-06-18 13:35:23 +00:00

support principle target output

This commit is contained in:
Shelikhoo 2021-06-19 00:13:09 +01:00
parent ea5bb04acf
commit b122200c2a
No known key found for this signature in database
GPG Key ID: C4D5E79D22B25316
3 changed files with 24 additions and 2 deletions

View File

@ -22,6 +22,15 @@ type LeastLoadStrategy struct {
ctx context.Context
}
func (l *LeastLoadStrategy) GetPrincipleTarget(strings []string) []string {
var ret []string
nodes := l.pickOutbounds(strings)
for _, v := range nodes {
ret = append(ret, v.Tag)
}
return ret
}
// NewLeastLoadStrategy creates a new LeastLoadStrategy with settings
func NewLeastLoadStrategy(settings *StrategyLeastLoadConfig) *LeastLoadStrategy {
return &LeastLoadStrategy{
@ -56,8 +65,7 @@ func (l *LeastLoadStrategy) InjectContext(ctx context.Context) {
}
func (s *LeastLoadStrategy) PickOutbound(candidates []string) string {
qualified := s.getNodes(candidates, time.Duration(s.settings.MaxRTT))
selects := s.selectLeastLoad(qualified)
selects := s.pickOutbounds(candidates)
count := len(selects)
if count == 0 {
// goes to fallbackTag
@ -66,6 +74,12 @@ func (s *LeastLoadStrategy) PickOutbound(candidates []string) string {
return selects[dice.Roll(count)].Tag
}
func (s *LeastLoadStrategy) pickOutbounds(candidates []string) []*node {
qualified := s.getNodes(candidates, time.Duration(s.settings.MaxRTT))
selects := s.selectLeastLoad(qualified)
return selects
}
// selectLeastLoad selects nodes according to Baselines and Expected Count.
//
// The strategy always improves network response speed, not matter which mode below is configured.

View File

@ -17,6 +17,10 @@ type LeastPingStrategy struct {
observatory extension.Observatory
}
func (l *LeastPingStrategy) GetPrincipleTarget(strings []string) []string {
return []string{l.PickOutbound(strings)}
}
func (l *LeastPingStrategy) InjectContext(ctx context.Context) {
l.ctx = ctx
}

View File

@ -7,6 +7,10 @@ import (
// RandomStrategy represents a random balancing strategy
type RandomStrategy struct{}
func (s *RandomStrategy) GetPrincipleTarget(strings []string) []string {
return strings
}
func (s *RandomStrategy) PickOutbound(candidates []string) string {
count := len(candidates)
if count == 0 {