Heim  >  Artikel  >  Backend-Entwicklung  >  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?

王林
王林nach vorne
2024-02-14 21:06:091236Durchsuche

对于 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)
    }))

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
}

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 {
          ...
        }
        ...
    }

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

Serverantwort:

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

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!

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