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?
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!