0
我簡單地編寫了服務器程序來接收數據表單客戶端。我有點不明白什麼有時我得到錯誤讀取tcp4 IP:端口輸入/輸出超時從功能 int, err := conn.Read([]byte)
事件時間設置功能SetDeadline()
未被超過。我介紹了我的代碼的一部分,但我認爲這將是足夠的。去。在服務器程序中獲取錯誤I/O超時
我收到數據的主循環如下。
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,然後新的數據是由客戶端發送和服務器的時間做別的事情,並拒絕連接。這只是我的假設,但我不確定。
你有權利。謝謝 :) – Mbded