Maison >développement back-end >Golang >Pour le client WebSocket de Golang Fiber, comment convertir le client/connexion HTTP en WebSocket ?
l'éditeur php Xinyi vous apporte des réponses aux questions sur la transformation du client WebSocket de Golang Fiber. Lors du développement avec Golang Fiber, nous devons parfois convertir le client HTTP ou la connexion en client WebSocket. Cela permet une communication bidirectionnelle entre HTTP et WebSocket sur la même connexion. Nous détaillerons ensuite comment réaliser ce processus de transformation. Avec les étapes suivantes, vous pourrez facilement développer à l'aide du client WebSocket dans Golang Fiber.
Pour des informations générales, consultez cet article récent sur stackoverflow.
Je mets en place un service WebSockets utilisant Golang Fiber comme suit :
app.Use("/ws", handler.UpgradeHandler) app.Get("/ws/:id", websocket.New(func(ws *websocket.Conn) { handler.MediaStreamHandler(ws) }))
Utilisez UpgradeHandler
middleware comme ceci :
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 }
S'attend à ce que le client HTTP du service fasse une requête HTTP GET à http://chat.acme.ai:80/ws/123
etc et force le serveur Fibre à ouvrir le service WebSockets. Par exemple :
func MediaStreamHandler(c *websocket.Conn) { ... for { if mt, buf, err = c.ReadMessage(); err != nil { ... } ... }
Nous y ingérons des flux jusqu'à la fermeture de WebSocket.
Question : Si un client émet une requête HTTP GET à un service Fibre pour démarrer un service WebSockets côté Fibre, comment la logique client transforme-t-elle son client HTTP en client WebSockets ?
Intuitivement, nous avons juste un socket quelque part, et la mise à niveau d'un client HTTP vers un client WebSockets consiste simplement à ajouter la bonne « colle » au client HTTP. Mais du point de vue de l'utilisation d'une solution fixe comme Java WebSockets, il n'est pas du tout clair comment transformer un client HTTP en client WebSockets.
Golang/Fiber est accidentel ici. Par définition, le protocole WebSockets initie une requête HTTP GET vers un point de terminaison de service ; lors de la prise de contact, le protocole de transport est mis à niveau de HTTP vers WebSockets. Une partie de cette mise à niveau réside dans la modification des en-têtes HTTP des requêtes et des réponses. Consultez les exemples liés au chat ci-dessous.
En-têtes de requête mis à jour :
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
Réponse du serveur :
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sM1YUkAGmm50PpG2HaGWk= Sec-WebSocket-Protocol: chat
Ces exemples sont tirés de cet article sur les WebSockets .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!