我正在構(gòu)建一個(gè)使用 websockets 的服務(wù)器。目前,每個(gè)連接的客戶端都使用兩個(gè) goroutine。一本用于閱讀,一本用于寫作。編寫 goroutine 基本上會(huì)監(jiān)聽(tīng)它應(yīng)該發(fā)送的消息的通道,然后嘗試傳遞它們。type User struct{ send chan []byte ...}func (u *User) Send(msg []byte){ u.send <- msg}問(wèn)題是,從客戶端 A 的讀取可能會(huì)導(dǎo)致對(duì)客戶端 B 的寫入。假設(shè)到 B 的連接有一些問(wèn)題(例如非常慢)并且它的發(fā)送通道已經(jīng)滿了。當(dāng)前的行為是,嘗試向通道添加消息現(xiàn)在開(kāi)始阻塞,直到從通道中刪除某些內(nèi)容。這意味著,現(xiàn)在 A 等待直到 B 的緩沖區(qū)不再滿。我想像這樣解決它:func (u *User) Send(msg []byte) err{ u.send, err <- msg if err != nil{ //The channels buffer is full. //Writing currently not possible. //Needs appropriate error handling. return err } return nil}基本上,我想要錯(cuò)誤處理而不是阻塞,以防緩沖區(qū)已滿。我如何做到最好?
Golang 防止通道阻塞
明月笑刀無(wú)情
2021-09-13 19:52:15