gonet
gonet copied to clipboard
ServerSocketClient协程被阻塞
建议不要在Socket的Stop函数中不要去关闭conn,因为有可能导致Run中的conn.Read会阻塞无法返回,导致无法释放 然后最好在conn.Read之前加一个读取超时,可以跟心跳测试的间隔时间一致的30秒,把conn.Stop 放在Socket.Close一起处理 让Run这个协程能够顺利执行和释放,原来的Socket的Stop只是改变一个状态,然后再Run的loop函数中针对状态,如果状态是SSF_STOP 直接退出循环,特别是在KCP模式下很容阻塞不释放。
if this.GetState() != SSF_RUN { return false }
this.conn.(kcp.UDPSession).SetDeadline(time.Now().Add(time.SecondHEART_TIME_OUT))
但不关闭连接的时候,如果客户端不发消息了,不是会阻塞在Read这里吗?
h
建议不要在Socket的Stop函数中不要去关闭conn,因为有可能导致Run中的conn.Read会阻塞无法返回,导致无法释放 然后最好在conn.Read之前加一个读取超时,可以跟心跳测试的间隔时间一致的30秒,把conn.Stop 放在Socket.Close一起处理 让Run这个协程能够顺利执行和释放,原来的Socket的Stop只是改变一个状态,然后再Run的loop函数中针对状态,如果状态是SSF_STOP 直接退出循环,特别是在KCP模式下很容阻塞不释放。
if this.GetState() != SSF_RUN { return false }
this.conn.(_kcp.UDPSession).SetDeadline(time.Now().Add(time.Second_HEART_TIME_OUT))
是可以这么做,再stop的时候设置SetDeadline