Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Untuk klien WebSocket Golang Fiber, bagaimana untuk menukar klien/sambungan HTTP kepada WebSocket?

Untuk klien WebSocket Golang Fiber, bagaimana untuk menukar klien/sambungan HTTP kepada WebSocket?

王林
王林ke hadapan
2024-02-14 21:06:091236semak imbas

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

editor php Xinyi membawakan anda jawapan kepada soalan tentang transformasi pelanggan WebSocket Golang Fiber. Apabila membangun dengan Golang Fiber, kadangkala kita perlu menukar klien HTTP atau sambungan kepada klien WebSocket. Ini membolehkan komunikasi dua hala antara HTTP dan WebSocket pada sambungan yang sama. Seterusnya, kami akan memperincikan bagaimana untuk mencapai proses transformasi ini. Dengan langkah-langkah berikut, anda akan dapat membangunkan dengan mudah menggunakan klien WebSocket dalam Golang Fiber.

Kandungan soalan

Untuk maklumat latar belakang, lihat artikel stackoverflow terbaru ini.

Saya sedang menyediakan perkhidmatan WebSockets menggunakan Golang Fiber seperti yang ditunjukkan di bawah:

app.Use("/ws", handler.UpgradeHandler)
    app.Get("/ws/:id", websocket.New(func(ws *websocket.Conn) {
        handler.MediaStreamHandler(ws)
    }))

Gunakan UpgradeHandler middleware seperti ini:

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
}

Menjangkakan klien HTTP perkhidmatan membuat permintaan HTTP GET kepada http://chat.acme.ai:80/ws/123dsb dan memaksa pelayan Fiber membuka perkhidmatan WebSockets. Contohnya:

func MediaStreamHandler(c *websocket.Conn) {
    ...
    for {
        if mt, buf, err = c.ReadMessage(); err != nil {
          ...
        }
        ...
    }

Kami menelan media penstriman di dalamnya sehingga WebSocket ditutup.

Soalan: Jika pelanggan membuat permintaan HTTP GET kepada perkhidmatan Fiber untuk memulakan perkhidmatan WebSockets di sebelah Fiber, bagaimanakah logik pelanggan menukar klien HTTPnya menjadi klien WebSockets?

Secara intuitif, kami hanya mempunyai soket di suatu tempat, dan menaik taraf klien HTTP kepada klien WebSockets hanyalah soal menambah "gam" yang betul pada klien HTTP. Tetapi dari perspektif menggunakan penyelesaian tetap seperti Java WebSockets, tidak jelas sama sekali cara menukar klien HTTP menjadi klien WebSockets.

Penyelesaian

Golang/Fiber secara tidak sengaja di sini. Mengikut definisi, protokol WebSockets memulakan permintaan HTTP GET ke titik akhir perkhidmatan semasa jabat tangan, protokol pengangkutan dinaik taraf daripada HTTP kepada WebSockets. Sebahagian daripada peningkatan ini ialah pengepala HTTP dalam kedua-dua permintaan dan respons diubah suai. Lihat contoh berkaitan sembang di bawah.

Tajuk permintaan ditingkatkan:

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

Maklum balas pelayan:

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

Contoh ini adalah daripada artikel ini tentang WebSockets .

Atas ialah kandungan terperinci Untuk klien WebSocket Golang Fiber, bagaimana untuk menukar klien/sambungan HTTP kepada WebSocket?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam