Heim > Backend-Entwicklung > Golang > So lauschen Sie nicht blockierend einem serverseitigen Websocket in Go

So lauschen Sie nicht blockierend einem serverseitigen Websocket in Go

PHPz
Freigeben: 2024-02-08 20:45:09
nach vorne
465 Leute haben es durchsucht

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

Frageninhalt

Ich verwende https://pkg.go.dev/golang.org/x/net/websocket, um einen serverseitigen Websocket zu erstellen. Die gesamte Kommunikation darüber erfolgt im JSON-Format. Mein Code enthält also:

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

Dies blockiert jedoch, bis der Client die Verbindung schließt. Ich weiß, dass dieses Websocket-Paket älter ist als der Kontext (und ich weiß, dass es neuere Websocket-Pakete gibt), aber trotzdem – gibt es wirklich keine Möglichkeit, auf nicht blockierende Weise auf eingehende Frames zu warten?


Richtige Antwort


Dies blockiert, bis der Client die Verbindung schließt.

Der einfachste Weg, gleichzeitige Blockierungsvorgänge zu handhaben, besteht darin, ihnen eine Goroutine zu geben. Goroutinen sind im Gegensatz zu Prozessen oder Threads im Wesentlichen „kostenlos“.

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

Das obige ist der detaillierte Inhalt vonSo lauschen Sie nicht blockierend einem serverseitigen Websocket in Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage