我很难理解我使用博客所做的事情的实现我正在创建一个新的 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 关注
- 101 浏览
添加回答
举报
0/150
提交
取消