修改默认端口
This commit is contained in:
@@ -115,6 +115,10 @@ func (c *Client) Start(ctx context.Context) {
|
|||||||
case ModePull:
|
case ModePull:
|
||||||
c.setCurrentMode(ModePull)
|
c.setCurrentMode(ModePull)
|
||||||
log.Printf("[Agent] Pull mode enabled - API will be served at /api/child/traffic and /api/child/speed")
|
log.Printf("[Agent] Pull mode enabled - API will be served at /api/child/traffic and /api/child/speed")
|
||||||
|
// Report agent info immediately via HTTP heartbeat
|
||||||
|
if err := c.sendHeartbeatHTTP(ctx); err != nil {
|
||||||
|
log.Printf("[Agent] Failed to send initial heartbeat in pull mode: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
case ModeAuto:
|
case ModeAuto:
|
||||||
fallthrough
|
fallthrough
|
||||||
@@ -227,10 +231,14 @@ func (c *Client) runWebSocket(ctx context.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// calculateBackoff calculates the reconnection backoff duration
|
// calculateBackoff calculates the reconnection backoff duration with exponential increase
|
||||||
func (c *Client) calculateBackoff() time.Duration {
|
func (c *Client) calculateBackoff() time.Duration {
|
||||||
c.reconnects++
|
c.reconnects++
|
||||||
backoff := time.Duration(c.reconnects) * 5 * time.Second
|
// Exponential backoff: 5s, 10s, 20s, 40s, 80s, 160s, 300s(cap)
|
||||||
|
backoff := 5 * time.Second
|
||||||
|
for i := 1; i < c.reconnects && backoff < 5*time.Minute; i++ {
|
||||||
|
backoff *= 2
|
||||||
|
}
|
||||||
if backoff > 5*time.Minute {
|
if backoff > 5*time.Minute {
|
||||||
backoff = 5 * time.Minute
|
backoff = 5 * time.Minute
|
||||||
}
|
}
|
||||||
@@ -288,6 +296,11 @@ func (c *Client) connectAndRun(ctx context.Context) error {
|
|||||||
|
|
||||||
log.Printf("[Agent] Connected and authenticated")
|
log.Printf("[Agent] Connected and authenticated")
|
||||||
|
|
||||||
|
// Report agent info (listen_port) immediately after connection
|
||||||
|
if err := c.sendHeartbeat(conn); err != nil {
|
||||||
|
log.Printf("[Agent] Failed to send initial heartbeat: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
return c.runMessageLoop(ctx, conn)
|
return c.runMessageLoop(ctx, conn)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -487,6 +500,7 @@ func (c *Client) runAutoMode(ctx context.Context) {
|
|||||||
|
|
||||||
// runAutoModeLoop is the internal loop for auto mode fallback
|
// runAutoModeLoop is the internal loop for auto mode fallback
|
||||||
func (c *Client) runAutoModeLoop(ctx context.Context) {
|
func (c *Client) runAutoModeLoop(ctx context.Context) {
|
||||||
|
autoRetries := 0
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
@@ -508,6 +522,7 @@ func (c *Client) runAutoModeLoop(ctx context.Context) {
|
|||||||
log.Printf("[Agent] WebSocket disconnected: %v", err)
|
log.Printf("[Agent] WebSocket disconnected: %v", err)
|
||||||
}
|
}
|
||||||
c.reconnects = 0
|
c.reconnects = 0
|
||||||
|
autoRetries = 0
|
||||||
continue
|
continue
|
||||||
} else {
|
} else {
|
||||||
log.Printf("[Agent] WebSocket failed: %v, trying HTTP...", err)
|
log.Printf("[Agent] WebSocket failed: %v, trying HTTP...", err)
|
||||||
@@ -520,13 +535,25 @@ func (c *Client) runAutoModeLoop(ctx context.Context) {
|
|||||||
if ctx.Err() != nil {
|
if ctx.Err() != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
autoRetries = 0
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
c.setCurrentMode(ModePull)
|
c.setCurrentMode(ModePull)
|
||||||
log.Printf("[Agent] Falling back to pull mode - API available at /api/child/traffic and /api/child/speed")
|
log.Printf("[Agent] Falling back to pull mode - API available at /api/child/traffic and /api/child/speed")
|
||||||
|
c.sendHeartbeatHTTP(ctx)
|
||||||
|
|
||||||
c.runPullModeWithTrafficReport(ctx, 30*time.Second)
|
// Exponential backoff for pull mode: 30s, 60s, 120s, 240s, 300s(cap)
|
||||||
|
autoRetries++
|
||||||
|
pullDuration := 30 * time.Second
|
||||||
|
for i := 1; i < autoRetries && pullDuration < 5*time.Minute; i++ {
|
||||||
|
pullDuration *= 2
|
||||||
|
}
|
||||||
|
if pullDuration > 5*time.Minute {
|
||||||
|
pullDuration = 5 * time.Minute
|
||||||
|
}
|
||||||
|
|
||||||
|
c.runPullModeWithTrafficReport(ctx, pullDuration)
|
||||||
|
|
||||||
if ctx.Err() != nil {
|
if ctx.Err() != nil {
|
||||||
return
|
return
|
||||||
@@ -603,6 +630,7 @@ func (c *Client) runHTTPReporterLoop(ctx context.Context) {
|
|||||||
defer speedTicker.Stop()
|
defer speedTicker.Stop()
|
||||||
defer heartbeatTicker.Stop()
|
defer heartbeatTicker.Stop()
|
||||||
|
|
||||||
|
c.sendHeartbeatHTTP(ctx)
|
||||||
c.sendTrafficHTTP(ctx)
|
c.sendTrafficHTTP(ctx)
|
||||||
c.sendSpeedHTTP(ctx)
|
c.sendSpeedHTTP(ctx)
|
||||||
|
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ func (c *Config) applyDefaults() {
|
|||||||
c.ConnectionMode = "auto"
|
c.ConnectionMode = "auto"
|
||||||
}
|
}
|
||||||
if c.ListenPort == "" {
|
if c.ListenPort == "" {
|
||||||
c.ListenPort = "8081"
|
c.ListenPort = "23889"
|
||||||
}
|
}
|
||||||
if c.TrafficReportInterval == 0 {
|
if c.TrafficReportInterval == 0 {
|
||||||
c.TrafficReportInterval = 1 * time.Minute
|
c.TrafficReportInterval = 1 * time.Minute
|
||||||
|
|||||||
Reference in New Issue
Block a user