Go语言实现的并发聊天室(四)

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通道数据,程序结束!

猜你喜欢

转载自blog.csdn.net/zhongliwen1981/article/details/88805299