我编写了简单的服务器程序来接收来自客户端的数据。我有点不明白有时我会得到错误读取 tcp4 IP:PORT i/o timeout from function int, err := conn.Read([]byte)event time set in function SetDeadline()not been exceeded. 我展示了我的代码的一部分,但我认为这已经足够了。
我接收数据的主循环如下。
c := NewClient()
c.kickTime: time.Now()
func (c *Client) Listen(){
durationToClose := time.Minute*time.Duration(5),
c.conn.SetDeadline(c.kickTime.Add(c.durationToClose))
buffer := make([]byte, 1024)
for{
reqLen, err := c.conn.Read(buffer)
if err != nil || reqLen == 0 {
fmt.Printf(err)
break
}
if err = c.CheckData(buffer) ; err != nil{
fmt.Printf("something is bad")
}else{
result := c.PrepareDataToSendInOtherPlace(buffer)
go c.RecievedData(result)
}
c.conn.SetDeadline(c.kickTime.Add(c.durationToKick))
}
}
对我来说,只有可疑的可能是附加功能,因为PrepareDataToSendInOtherPlace() , CheckData()这可能需要一些时间 CPU,然后新数据由客户端发送,而服务器当时在做其他事情并拒绝连接。这只是我的假设,但我不确定。
叮当猫咪
相关分类