Maison  >  Article  >  développement back-end  >  Comment écouter un websocket côté serveur de manière non bloquante dans Go

Comment écouter un websocket côté serveur de manière non bloquante dans Go

PHPz
PHPzavant
2024-02-08 20:45:09403parcourir

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

Contenu de la question

J'utilise https://pkg.go.dev/golang.org/x/net/websocket pour créer un websocket côté serveur. Toutes les communications qui y transitent sont au format json. Mon code contient donc :

func wsHandler(ws *websocket.Conn) {
    var evnt event
    websocket.JSON.Receive(ws, &evnt)
    …

Cependant, cela bloque jusqu'à ce que le client ferme la connexion. Je sais que ce package websocket est antérieur au contexte (et je sais qu'il existe des packages websocket plus récents), mais quand même, n'y a-t-il vraiment aucun moyen d'attendre les images entrantes de manière non bloquante ?


Bonne réponse


Cela bloque jusqu'à ce que le client ferme la connexion.

Le moyen le plus simple de gérer les opérations de blocage simultanées est de leur donner une goroutine. Les goroutines, contrairement aux processus ou aux threads, sont essentiellement « gratuites ».

func wsHandler(ws *websocket.Conn) {
    go func() {
      var evnt event
      websocket.JSON.Receive(ws, &evnt)
      ....
   }()
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer