php小编新一为您带来了关于Golang Fiber的WebSocket客户端的转变问题的解答。在使用Golang Fiber进行开发时,有时我们需要将HTTP客户端或连接转换为WebSocket客户端。这样可以在同一个连接上实现HTTP和WebSocket的双向通信。接下来,我们将详细介绍如何实现这一转变过程。通过以下步骤,您将能够轻松地在Golang Fiber中使用WebSocket客户端进行开发。
有关背景信息,请参阅最近的这篇 stackoverflow 文章。
我正在使用 Golang Fiber 设置 WebSockets 服务,如下所示:
app.Use("/ws", handler.UpgradeHandler) app.Get("/ws/:id", websocket.New(func(ws *websocket.Conn) { handler.MediaStreamHandler(ws) }))
使用 UpgradeHandler
中间件,如下所示:
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 }
期望该服务的 HTTP 客户端向 http://chat.acme.ai:80/ws/123
等发出 HTTP GET 请求,并强制 Fiber 服务器打开 WebSockets 服务。例如:
func MediaStreamHandler(c *websocket.Conn) { ... for { if mt, buf, err = c.ReadMessage(); err != nil { ... } ... }
我们在其中摄取流媒体,直到 WebSocket 关闭。
问题:如果客户端向 Fiber 服务发起 HTTP GET 请求以启动 Fiber 端的 WebSockets 服务,那么客户端逻辑如何将其 HTTP 客户端转变为 WebSockets 客户端?
直观上,我们只是在某个地方有一个套接字,将 HTTP 客户端升级到 WebSockets 客户端只是将正确的“粘合剂”添加到 HTTP 客户端。但从使用 Java WebSockets 等固定解决方案的角度来看,完全不清楚如何将 HTTP 客户端转变为 WebSockets 客户端。
Golang/Fiber 在这里是偶然的。根据定义,WebSockets 协议向某个服务端点发起 HTTP GET 请求;在握手期间,传输协议从 HTTP 升级为 WebSockets。该升级的一部分是请求和响应中的 HTTP 标头都被修改。请参阅下面的聊天相关示例。
升级后的请求标头:
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
服务器响应:
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sM1YUkAGmm50PpG2HaGWk= Sec-WebSocket-Protocol: chat
这些示例来自这篇有关 WebSockets 的文章 .
以上是对于 Golang Fiber 的 WebSocket 客户端,如何将 HTTP 客户端/连接转变为 WebSocket?的详细内容。更多信息请关注PHP中文网其他相关文章!