Maison > développement back-end > Golang > 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
Libérer: 2024-02-08 20:45:09
avant
466 Les gens l'ont consulté

如何在 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)
    …
Copier après la connexion

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)
      ....
   }()
}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal