1. 监听客户端退出
2. 超出自动退出
第一步:在HandleConnect函数中定义两个变量。
isQuit := make(chan bool)
hasData := make(chan bool)
第二步:如果客户端关闭,向isQuit通道写入数据。
第三步:在go func(){}默认添加以下代码。
第四步:修改for循环,从isQuit、hasData和time定时器通道中读取数据。
for {
select {
case <-isQuit:
close(client.C)
delete(onlineMap, addr)
userInfo := "[" + client.Addr + "]" + client.Name + ": logout\n"
message <- userInfo
return
case <-hasData:
//如果读取到数据,就什么都不用做
case <-time.After(time.Second * 60):
delete(onlineMap, addr)
userInfo := "[" + client.Addr + "]" + client.Name + ": timeout\n"
message <- userInfo
return
}
}
注意:time.After ()函数会把当前时间返回到time通道中。如果hasData通道中有数据,那么就不会读取time通道。如果60秒内hasData通道都没有数据,那么就会读取time通道数据,程序结束!