首頁  >  文章  >  後端開發  >  如何在 Go 中非阻塞地監聽伺服器端 websocket

如何在 Go 中非阻塞地監聽伺服器端 websocket

PHPz
PHPz轉載
2024-02-08 20:45:09440瀏覽

如何在 Go 中非阻塞地监听服务器端 websocket

問題內容

我使用 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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除