Heim > Backend-Entwicklung > Golang > Wie konvertiert man für den WebSocket-Client von Golang Fiber den HTTP-Client/die HTTP-Verbindung in WebSocket?

Wie konvertiert man für den WebSocket-Client von Golang Fiber den HTTP-Client/die HTTP-Verbindung in WebSocket?

王林
Freigeben: 2024-02-14 21:06:09
nach vorne
1338 Leute haben es durchsucht

对于 Golang Fiber 的 WebSocket 客户端,如何将 HTTP 客户端/连接转变为 WebSocket?

php-Editor Xinyi liefert Ihnen Antworten auf die Fragen zur Transformation des WebSocket-Clients von Golang Fibre. Bei der Entwicklung mit Golang Fiber müssen wir manchmal den HTTP-Client oder die Verbindung in einen WebSocket-Client konvertieren. Dies ermöglicht eine bidirektionale Kommunikation zwischen HTTP und WebSocket über dieselbe Verbindung. Als Nächstes werden wir im Detail erläutern, wie dieser Transformationsprozess erreicht werden kann. Mit den folgenden Schritten können Sie problemlos mit dem WebSocket-Client in Golang Fiber entwickeln.

Frageninhalt

Hintergrundinformationen finden Sie in diesem aktuellen Stackoverflow-Artikel.

Ich richte einen WebSockets-Dienst mit Golang Fiber wie folgt ein:

app.Use("/ws", handler.UpgradeHandler)
    app.Get("/ws/:id", websocket.New(func(ws *websocket.Conn) {
        handler.MediaStreamHandler(ws)
    }))
Nach dem Login kopieren

Verwenden Sie UpgradeHandler Middleware wie folgt:

func UpgradeHandler(c *fiber.Ctx) error {
    // IsWebSocketUpgrade returns true if the client
    // requested upgrade to the WebSocket protocol.
    if websocket.IsWebSocketUpgrade(c) {
        log.Info("request to open WebSockets channel")
        return c.Next()
    }
    return fiber.ErrUpgradeRequired
}
Nach dem Login kopieren

Erwartet, dass der HTTP-Client des Dienstes eine HTTP-GET-Anfrage an http://chat.acme.ai:80/ws/123etc sendet, und zwingt den Fiber-Server, den WebSockets-Dienst zu öffnen. Zum Beispiel:

func MediaStreamHandler(c *websocket.Conn) {
    ...
    for {
        if mt, buf, err = c.ReadMessage(); err != nil {
          ...
        }
        ...
    }
Nach dem Login kopieren

Wir nehmen darin Streaming-Medien auf, bis WebSocket geschlossen wird.

Frage: Wenn ein Client eine HTTP-GET-Anfrage an einen Fiber-Dienst sendet, um einen WebSockets-Dienst auf der Fiber-Seite zu starten, wie verwandelt die Client-Logik seinen HTTP-Client in einen WebSockets-Client?

Intuitiv haben wir einfach irgendwo einen Socket, und das Upgrade eines HTTP-Clients auf einen WebSockets-Client ist nur eine Frage des Hinzufügens des richtigen „Klebstoffs“ zum HTTP-Client. Aber aus der Perspektive der Verwendung einer festen Lösung wie Java WebSockets ist überhaupt nicht klar, wie man einen HTTP-Client in einen WebSockets-Client umwandelt.

Workaround

Golang/Fiber ist hier ein Zufall. Per Definition initiiert das WebSockets-Protokoll während des Handshakes eine HTTP-GET-Anfrage an einen Dienstendpunkt. Das Transportprotokoll wird von HTTP auf WebSockets aktualisiert. Ein Teil dieses Upgrades besteht darin, dass HTTP-Header sowohl in Anfragen als auch in Antworten geändert werden. Sehen Sie sich unten die Chat-Beispiele an.

Aktualisierte Anforderungsheader:

GET /chat HTTP/1.1
  Host: server.example.com
  Upgrade: websocket
  Connection: Upgrade
  Sec-WebSocket-Key: x3JJHmbDL1EzLkh9GBhXDw==
  Sec-WebSocket-Protocol: chat, superchat
  Sec-WebSocket-Version: 13
  Origin: http://example.com
Nach dem Login kopieren

Serverantwort:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sM1YUkAGmm50PpG2HaGWk=
Sec-WebSocket-Protocol: chat
Nach dem Login kopieren

Diese Beispiele stammen aus diesem Artikel über WebSockets .

Das obige ist der detaillierte Inhalt vonWie konvertiert man für den WebSocket-Client von Golang Fiber den HTTP-Client/die HTTP-Verbindung in WebSocket?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
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