feat: random sleep duration before reconnecting

This commit is contained in:
blizard863 2022-03-15 09:43:49 +08:00
parent 37c27169ac
commit be7c7d229d

View File

@ -377,28 +377,46 @@ func (sv *SUDPVisitor) Run() (err error) {
func (sv *SUDPVisitor) dispatcher() { func (sv *SUDPVisitor) dispatcher() {
xl := xlog.FromContextSafe(sv.ctx) xl := xlog.FromContextSafe(sv.ctx)
var (
visitorConn net.Conn
err error
)
for { for {
// loop for get frpc to frps tcp conn // loop for get frpc to frps tcp conn
// setup worker // setup worker
// wait worker to finished // wait worker to finished
// retry or exit // retry or exit
visitorConn, err := sv.getNewVisitorConn()
if len(sv.sendCh) > 0 {
visitorConn, err = sv.getNewVisitorConn() // connect to frps when data is ready
} else {
time.Sleep(time.Second)
continue
}
if err != nil { if err != nil {
// release all sendCh data
// check if proxy is closed // check if proxy is closed
// if checkCloseCh is close, we will return, other case we will continue to reconnect // if checkCloseCh is close, we will return, other case we will continue to reconnect
select { for {
case <-sv.checkCloseCh: if len(sv.sendCh) == 0 {
xl.Info("frpc sudp visitor proxy is closed") break
return }
default: select {
case <-sv.sendCh:
case <-sv.checkCloseCh:
xl.Info("frpc sudp visitor proxy is closed")
return
default:
}
} }
time.Sleep(3 * time.Second)
xl.Warn("newVisitorConn to frps error: %v, try to reconnect", err) xl.Warn("newVisitorConn to frps error: %v, try to reconnect", err)
continue continue
} }
// visitorConn always be closed when worker done.
sv.worker(visitorConn) sv.worker(visitorConn)
select { select {