我使用 https://pkg.go.dev/golang.org/x/net/websocket 來建立伺服器端 websocket。透過它進行的所有通訊均採用 json 格式。因此,我的程式碼包含:
func wsHandler(ws *websocket.Conn) { var evnt event websocket.JSON.Receive(ws, &evnt) …
但是,這會阻塞,直到客戶端關閉連線。我知道這個 websocket 包早於上下文(並且我知道有更新的 websocket 包),但仍然 – 真的沒有辦法以非阻塞方式等待傳入幀嗎?
這會阻塞,直到客戶端關閉連線。
處理並發阻塞操作的最簡單方法是給它們一個 goroutine。 goroutines 與進程或線程不同,本質上是「免費的」。
func wsHandler(ws *websocket.Conn) { go func() { var evnt event websocket.JSON.Receive(ws, &evnt) .... }() }
以上是如何在 Go 中非阻塞地監聽伺服器端 websocket的詳細內容。更多資訊請關注PHP中文網其他相關文章!