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
PHPznach vorne
2024-02-08 20:45:09481Durchsuche

如何在 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)
    …

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)
      ....
   }()
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen