


For Golang Fiber's WebSocket client, how to convert HTTP client/connection to WebSocket?
php editor Xinyi brings you answers to the questions about the transformation of Golang Fiber's WebSocket client. When developing with Golang Fiber, sometimes we need to convert the HTTP client or connection to a WebSocket client. This enables two-way communication between HTTP and WebSocket on the same connection. Next, we will detail how to achieve this transformation process. With the following steps, you will be able to easily develop using WebSocket client in Golang Fiber.
Question content
For background information, see this recent stackoverflow article.
I am setting up a WebSockets service using Golang Fiber as follows:
app.Use("/ws", handler.UpgradeHandler) app.Get("/ws/:id", websocket.New(func(ws *websocket.Conn) { handler.MediaStreamHandler(ws) }))
Use UpgradeHandler
middleware as follows:
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 }
Expect the service's HTTP client to make an HTTP GET request to http://chat.acme.ai:80/ws/123
etc. and force the Fiber server to open the WebSockets service. For example:
func MediaStreamHandler(c *websocket.Conn) { ... for { if mt, buf, err = c.ReadMessage(); err != nil { ... } ... }
We ingest streaming media in it until the WebSocket is closed.
Question: If a client makes an HTTP GET request to the Fiber service to start a WebSockets service on the Fiber side, how does the client logic turn its HTTP client into a WebSockets client?
Intuitively, we just have a socket somewhere, and upgrading an HTTP client to a WebSockets client is just a matter of adding the correct "glue" to the HTTP client. But from the perspective of using a fixed solution like Java WebSockets, it's not at all clear how to turn an HTTP client into a WebSockets client.
Workaround
Golang/Fiber is accidental here. By definition, the WebSockets protocol initiates an HTTP GET request to a service endpoint; during the handshake, the transport protocol is upgraded from HTTP to WebSockets. Part of this upgrade is that HTTP headers in both requests and responses are modified. See the chat-related examples below.
Upgraded request headers:
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
Server response:
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sM1YUkAGmm50PpG2HaGWk= Sec-WebSocket-Protocol: chat
These examples come from this article about WebSockets .
The above is the detailed content of For Golang Fiber's WebSocket client, how to convert HTTP client/connection to WebSocket?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Real-time Bitcoin USD Price Factors that affect Bitcoin price Indicators for predicting future Bitcoin prices Here are some key information about the price of Bitcoin in 2018-2024:

Yes, H5 page production is an important implementation method for front-end development, involving core technologies such as HTML, CSS and JavaScript. Developers build dynamic and powerful H5 pages by cleverly combining these technologies, such as using the <canvas> tag to draw graphics or using JavaScript to control interaction behavior.

The method of customizing resize symbols in CSS is unified with background colors. In daily development, we often encounter situations where we need to customize user interface details, such as adjusting...

Regarding the reasons and solutions for misaligned display of inline-block elements. When writing web page layout, we often encounter some seemingly strange display problems. Compare...

How to use JavaScript or CSS to control the top and end of the page in the browser's printing settings. In the browser's printing settings, there is an option to control whether the display is...

The problem of container opening due to excessive omission of text under Flex layout and solutions are used...

How to achieve the 45-degree curve effect of segmenter? In the process of implementing the segmenter, how to make the right border turn into a 45-degree curve when clicking the left button, and the point...

Tips for Implementing Segmenter Effects In user interface design, segmenter is a common navigation element, especially in mobile applications and responsive web pages. ...
