mirror of
https://github.com/yusing/godoxy.git
synced 2026-03-26 19:11:08 +01:00
- These changes makes the API incombatible with previous versions - Added new types for error handling, success responses, and health checks. - Updated health check logic to utilize the new types for better clarity and structure. - Refactored existing handlers to improve response consistency and error handling. - Updated Makefile to include a new target for generating API types from Swagger. - Updated "new agent" API to respond an encrypted cert pair
25 lines
642 B
Go
25 lines
642 B
Go
package loadbalancer
|
|
|
|
import (
|
|
"net/http"
|
|
"sync/atomic"
|
|
|
|
"github.com/yusing/go-proxy/internal/types"
|
|
)
|
|
|
|
type roundRobin struct {
|
|
index atomic.Uint32
|
|
}
|
|
|
|
func (*LoadBalancer) newRoundRobin() impl { return &roundRobin{} }
|
|
func (lb *roundRobin) OnAddServer(srv types.LoadBalancerServer) {}
|
|
func (lb *roundRobin) OnRemoveServer(srv types.LoadBalancerServer) {}
|
|
|
|
func (lb *roundRobin) ServeHTTP(srvs types.LoadBalancerServers, rw http.ResponseWriter, r *http.Request) {
|
|
index := lb.index.Add(1) % uint32(len(srvs))
|
|
srvs[index].ServeHTTP(rw, r)
|
|
if lb.index.Load() >= 2*uint32(len(srvs)) {
|
|
lb.index.Store(0)
|
|
}
|
|
}
|