Rumah pembangunan bahagian belakang Golang Bagaimanakah Go WebSocket melaksanakan komunikasi dua hala?

Bagaimanakah Go WebSocket melaksanakan komunikasi dua hala?

Jun 05, 2024 pm 09:38 PM
go

Bahasa Go mempunyai sokongan terbina dalam untuk WebSocket, yang boleh mencapai komunikasi dua hala melalui langkah berikut: Cipta pelayan WebSocket: Cipta fungsi pengendali HTTP. Buat struktur Penaik taraf untuk menaik taraf permintaan HTTP. Mulakan pelayan WebSocket. Buat klien WebSocket: Buat permintaan HTTP dan tetapkan pengepala WebSocket. Buat struktur Dialer. Gunakan kaedah Dail untuk mewujudkan sambungan.

Go WebSocket 如何实现双向通信?

Go WebSocket: Mendayakan komunikasi dua hala

WebSocket ialah protokol komunikasi dua hala yang membenarkan pertukaran data masa nyata antara pelanggan dan pelayan melalui satu sambungan TCP berterusan. Bahasa Go menyediakan pembangun dengan sokongan terbina dalam untuk WebSocket, menjadikan komunikasi dua hala mudah dan mudah.

Mencipta pelayan WebSocket

Mencipta pelayan WebSocket memerlukan tiga langkah:

  1. Gunakan pakej net/http untuk mencipta fungsi http.Handler, yang mana mengendalikan sambungan WebSocket. net/http 包创建 http.Handler 函数,该函数处理 WebSocket 连接。
  2. 创建 websocket.Upgrader 结构体,该结构体将 HTTP 请求升级为 WebSocket 连接。
  3. 使用 http.ServeHTTP 方法启动 WebSocket 服务端。
package main

import (
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

func main() {
    // HTTP 处理程序
    handler := func(w http.ResponseWriter, r *http.Request) {
        upgrader := websocket.Upgrader{}
        conn, err := upgrader.Upgrade(w, r, nil)
        if err != nil {
            log.Fatal(err)
        }
        defer conn.Close()

        for {
            messageType, message, err := conn.ReadMessage()
            if err != nil {
                log.Fatal(err)
            }
            if messageType == websocket.CloseMessage {
                log.Println("Client closed connection")
                return
            }
            log.Printf("Received from client: %s", string(message))
            err = conn.WriteMessage(messageType, []byte("Echoed: "+string(message)))
            if err != nil {
                log.Fatal(err)
            }
        }
    }

    // 启动 WebSocket 服务端
    http.HandleFunc("/websocket", handler)
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal(err)
    }
}

创建 WebSocket 客户端

创建 WebSocket 客户端同样需要三步:

  1. 使用 net/http 包创建 http.Request,并设置 "Upgrade: WebSocket" 头。
  2. 创建 websocket.Dialer 结构体,该结构体用于建立 WebSocket 连接。
  3. 使用 Dial
  4. Buat struktur websocket.Upgrader, yang meningkatkan permintaan HTTP kepada sambungan WebSocket.

Gunakan kaedah http.ServeHTTP untuk memulakan pelayan WebSocket.

🎜
package main

import (
    "fmt"
    "log"

    "github.com/gorilla/websocket"
)

func main() {
    dialers := websocket.Dialer{
        ReadBufferSize:  1024,
        WriteBufferSize: 1024,
    }

    conn, _, err := dialers.Dial("ws://localhost:8080/websocket", nil)
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    for i := 0; i < 10; i++ {
        message := fmt.Sprintf("Hello from client %d", i)
        err := conn.WriteMessage(websocket.TextMessage, []byte(message))
        if err != nil {
            log.Fatal(err)
        }

        _, message, err = conn.ReadMessage()
        if err != nil {
            log.Fatal(err)
        }
        log.Printf("Received echo: %s", string(message))
    }
}
🎜🎜Mencipta klien WebSocket🎜🎜🎜Mencipta klien WebSocket juga memerlukan tiga langkah: 🎜🎜🎜Gunakan pakej net/http untuk mencipta http.Request dan tetapkan pengepala "Upgrade: WebSocket". 🎜🎜Buat struktur websocket.Dialer, yang digunakan untuk mewujudkan sambungan WebSocket. 🎜🎜Gunakan kaedah Dail untuk mewujudkan sambungan. 🎜🎜rrreee🎜Dengan langkah ini, anda boleh melaksanakan komunikasi dua hala WebSocket dengan mudah dalam Go, menambahkan keupayaan interaksi masa nyata pada aplikasi anda. 🎜

Atas ialah kandungan terperinci Bagaimanakah Go WebSocket melaksanakan komunikasi dua hala?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Agnes Tachyon Build Guide | Musume Derby Pretty
2 minggu yang lalu By Jack chen
Oguri Cap Build Guide | Musume Derby Pretty
3 minggu yang lalu By Jack chen
Puncak bagaimana untuk emote
4 minggu yang lalu By Jack chen

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara Memasang Pergi Cara Memasang Pergi Jul 09, 2025 am 02:37 AM

Kunci untuk memasang Go ialah memilih versi yang betul, mengkonfigurasi pembolehubah persekitaran, dan mengesahkan pemasangan. 1. Pergi ke laman web rasmi untuk memuat turun pakej pemasangan sistem yang sepadan. Windows menggunakan fail .msi, macOS menggunakan fail .pkg, menggunakan fail linux .tar.gz dan unzip mereka ke direktori /usr /tempatan; 2. Konfigurasi pembolehubah persekitaran, edit ~/.bashrc atau ~/. 3. Gunakan arahan kerajaan untuk mengesahkan pemasangan, dan jalankan program ujian hello.go untuk mengesahkan bahawa penyusunan dan pelaksanaan adalah normal. Tetapan jalan dan gelung sepanjang proses

Contoh Sync.WaitGroup Contoh Sync.WaitGroup Jul 09, 2025 am 01:48 AM

Sync.WaitGroup digunakan untuk menunggu sekumpulan goroutin untuk menyelesaikan tugas. Intinya adalah untuk bekerjasama melalui tiga kaedah: tambah, selesai, dan tunggu. 1.add (n) Tetapkan bilangan goroutine untuk menunggu; 2.Done () dipanggil pada akhir setiap goroutine, dan kiraan dikurangkan oleh satu; 3.Wait () menghalang coroutine utama sehingga semua tugas selesai. Apabila menggunakannya, sila ambil perhatian: Tambah hendaklah dipanggil di luar goroutine, elakkan tunggu pendua, dan pastikan untuk memastikan bahawa Don dipanggil. Adalah disyorkan untuk menggunakannya dengan menangguhkan. Ia adalah perkara biasa dalam merangkak bersama laman web, pemprosesan data batch dan senario lain, dan dapat mengawal proses konkurensi dengan berkesan.

Pergi Tutorial Pakej Embed Pergi Tutorial Pakej Embed Jul 09, 2025 am 02:46 AM

Menggunakan pakej embed Go dengan mudah boleh membenamkan sumber statik ke dalam binari, sesuai untuk perkhidmatan web untuk membungkus HTML, CSS, gambar dan fail lain. 1. Mengisytiharkan sumber tertanam untuk menambah // Go: enmbed Comment sebelum pemboleh ubah, seperti membenamkan satu fail hello.txt; 2. Ia boleh tertanam dalam keseluruhan direktori seperti statik/*, dan menyedari pembungkusan pelbagai fail melalui embed.fs; 3. Adalah disyorkan untuk menukar mod pemuatan cakera melalui pembolehubah bangunan atau persekitaran untuk meningkatkan kecekapan; 4. Perhatikan ketepatan laluan, batasan saiz fail dan ciri-ciri bacaan sumber terbenam. Penggunaan rasional embed dapat memudahkan penggunaan dan mengoptimumkan struktur projek.

Pergi antara muka {} vs ada Pergi antara muka {} vs ada Jul 11, 2025 am 02:38 AM

Dalam bahasa Go, antara muka {} dan mana -mana jenis yang sama. Sejak GO1.18, mana -mana telah diperkenalkan sebagai alias untuk antara muka {}. Tujuan utama adalah untuk meningkatkan kebolehbacaan dan kejelasan semantik kod; 1. 2. Interface {} lebih sesuai untuk menentukan tingkah laku antara muka, menekankan jenis antara muka, atau serasi dengan kod lama; 3. Prestasi kedua adalah sama dengan mekanisme asas, dan pengkompil akan menggantikan apa -apa dengan antara muka {}, yang tidak akan menyebabkan overhead tambahan; 4. Perhatikan untuk menaip isu keselamatan semasa menggunakannya, dan mungkin perlu bekerjasama dengan penegasan jenis atau

Pergi pilih dengan kes lalai Pergi pilih dengan kes lalai Jul 14, 2025 am 02:54 AM

Tujuan Select Plus Default adalah untuk membolehkan Pilih untuk melakukan tingkah laku lalai apabila tiada cawangan lain yang bersedia untuk mengelakkan penyekatan program. 1. Apabila menerima data dari saluran tanpa menyekat, jika saluran kosong, ia akan terus memasuki cawangan lalai; 2. Dalam kombinasi dengan masa. Selepas atau ticker, cuba hantar data dengan kerap. Jika saluran penuh, ia tidak akan menyekat dan melangkau; 3. Mencegah kebuntuan, elakkan program terperangkap apabila tidak pasti sama ada saluran ditutup; Apabila menggunakannya, sila ambil perhatian bahawa cawangan lalai akan dilaksanakan dengan serta -merta dan tidak boleh disalahgunakan, dan lalai dan kes saling eksklusif dan tidak akan dilaksanakan pada masa yang sama.

Contoh API GO REST Contoh API GO REST Jul 14, 2025 am 03:01 AM

Bagaimana dengan cepat melaksanakan contoh Restapi yang ditulis dalam GO? Jawapannya adalah menggunakan perpustakaan standard Net/HTTP, yang boleh diselesaikan mengikut tiga langkah berikut: 1. Sediakan struktur projek dan memulakan modul; 2. Tentukan struktur data dan fungsi pemprosesan, termasuk mendapatkan semua data, mendapatkan data tunggal berdasarkan ID, dan membuat data baru; 3. Daftar laluan dalam fungsi utama dan mulakan pelayan. Seluruh proses tidak memerlukan perpustakaan pihak ketiga. Fungsi Restapi Asas dapat direalisasikan melalui perpustakaan standard dan boleh diuji melalui penyemak imbas atau pos.

Cara membina pelayan web di mana sahaja Cara membina pelayan web di mana sahaja Jul 15, 2025 am 03:05 AM

Ia tidak sukar untuk membina pelayan web yang ditulis dalam Go. Inti terletak pada menggunakan pakej NET/HTTP untuk melaksanakan perkhidmatan asas. 1. Gunakan NET/HTTP untuk memulakan pelayan yang paling mudah: fungsi pemprosesan mendaftar dan mendengar port melalui beberapa baris kod; 2. 3. Amalan Umum: Routing Kumpulan oleh Modul Fungsional, dan gunakan perpustakaan pihak ketiga untuk menyokong padanan kompleks; 4. Perkhidmatan Fail Statik: Sediakan fail HTML, CSS dan JS melalui http.fileserver; 5. Prestasi dan Keselamatan: Aktifkan HTTPS, hadkan saiz badan permintaan, dan tetapkan masa tamat untuk meningkatkan keselamatan dan prestasi. Selepas menguasai perkara -perkara utama ini, lebih mudah untuk mengembangkan fungsi.

Cara Membuat Permintaan HTTP Di Perjalanan Cara Membuat Permintaan HTTP Di Perjalanan Jul 14, 2025 am 02:48 AM

Kaedah memulakan permintaan HTTP di GO adalah seperti berikut: 1. Gunakan http.get () untuk memulakan permintaan GET yang paling mudah, ingat untuk mengendalikan kesilapan dan menutup badan; 2. Gunakan http.post () atau http.newRequest () untuk menghantar permintaan pos, dan anda boleh menetapkan data JSON atau membentuk data; 3. Tetapkan masa tamat, header dan cookies, tamat masa kawalan dan header.Set untuk menambah tajuk tersuai melalui pelanggan, dan gunakan Cookiejar untuk mengurus kuki secara automatik; 4. Nota termasuk perlu menutup badan, objek bukan semula, dan menetapkan pengguna-AG

See all articles