前端之家收集整理的这篇文章主要介绍了
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@{}}
}