第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Golang 防止通道阻塞

Golang 防止通道阻塞

Go
明月笑刀無(wú)情 2021-09-13 19:52:15
我正在構(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ū)已滿。我如何做到最好?
查看完整描述

1 回答

?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊

正如 ThunderCat 在他的評(píng)論中指出的那樣,解決方案是


func (u *User) Send(msg []byte){

    select{

    case u.send <- msg:

    default: //Error handling here

    }

}


查看完整回答
反對(duì) 回復(fù) 2021-09-13
  • 1 回答
  • 0 關(guān)注
  • 214 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)