我很難理解我使用博客所做的事情的實現我正在創建一個新的 websocket 連接,其中我正在運行一個無限循環據我了解無論 websocket 收到什么消息,無限循環都應該無限期地運行但事實并非如此,它內部的邏輯只有在從前端 ws 連接發送“新的有效負載/消息”時才會觸發:func (s *SocketHandlers) NewConnectionHandler(w http.ResponseWriter, r *http.Request) { // upgrade the http request to a ws request ws, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Fatal(err) } defer ws.Close() for { // infinite loop log.Println("Checking to see if this repeats") // <=== PRINTS ONLY ONCE! var payload core.NewSessionPayload if err := ws.ReadJSON(&payload); err != nil { log.Println("Cannot read socket conection payload") log.Fatal(err) } s.clientsMap[ws] = core.ClientNode{ Active: true, Username: payload.Username, } // broadcast the latest users list to all the users s.broadcaster <- payload.Username }}
1 回答

一只萌萌小番薯
TA貢獻1795條經驗 獲得超7個贊
關鍵在于s.broadcaster <- payload.Username
它試圖從渠道獲取價值。
您可以在此處閱讀有關頻道的更多信息https://gobyexample.com/channels。
通道操作(即寫入或讀?。┍举|上是阻塞的。
這表示:
當我們使用 GoRoutine 將數據發送到通道時,它將被阻塞,直到數據被另一個 GoRoutine 消費。
當我們使用 GoRoutine 從通道接收數據時,它將被阻塞,直到數據在通道中可用。
- 1 回答
- 0 關注
- 132 瀏覽
添加回答
舉報
0/150
提交
取消