首頁  >  文章  >  後端開發  >  對於 Golang Fiber 的 WebSocket 用戶端,如何將 HTTP 用戶端/連線轉變為 WebSocket?

對於 Golang Fiber 的 WebSocket 用戶端,如何將 HTTP 用戶端/連線轉變為 WebSocket?

王林
王林轉載
2024-02-14 21:06:091236瀏覽

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

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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除