Golang自玩项目中一个重连机制实现.

前端之家收集整理的这篇文章主要介绍了Golang自玩项目中一个重连机制实现.前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
package@H_404_3@ tcp_listen

type@H_404_3@ Connection interface@H_404_3@ {
    Read() (value interface@H_404_3@{},tag byte@H_404_3@,err error)
    Write(tag byte@H_404_3@,body interface@H_404_3@{}) (err error)
    Close() error
    LocalAddr() string@H_404_3@
    RemoteAddr() string@H_404_3@
}

type@H_404_3@ isReconn struct@H_404_3@ {
    reconn       bool@H_404_3@
    connFunc     func@H_404_3@()
    continueChan []chan@H_404_3@ bool@H_404_3@
}

func@H_404_3@ (self *isReconn) success() {
    self.reconn = true@H_404_3@
    self.connFunc()
    for@H_404_3@ _,Chan := range@H_404_3@ self.continueChan {
        Chan <- true@H_404_3@
    }
    self.reconn = false@H_404_3@
}

func@H_404_3@ (self *isReconn) Reconnection() <-chan@H_404_3@ bool@H_404_3@ {
    Chan := make@H_404_3@(chan@H_404_3@ bool@H_404_3@, 1@H_404_3@)
    if@H_404_3@ !self.reconn {
        self.continueChan = []chan@H_404_3@ bool@H_404_3@{}
        self.continueChan = append@H_404_3@(self.continueChan,Chan)
        go@H_404_3@ self.success()
    } else@H_404_3@ {
        self.continueChan = append@H_404_3@(self.continueChan,Chan)
    }
    return@H_404_3@ Chan
}

func@H_404_3@ NewReconnection(f func@H_404_3@()) *isReconn {
    return@H_404_3@ &isReconn{connFunc: f,continueChan: []chan@H_404_3@ bool@H_404_3@{}}
}

猜你在找的Go相关文章