首頁 > 後端開發 > Golang > 主體

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

PHPz
發布: 2024-02-08 20:45:09
轉載
422 人瀏覽過

如何在 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!