Rumah  >  Artikel  >  pembangunan bahagian belakang  >  contoh golang WebSocket: membina aplikasi sembang mudah

contoh golang WebSocket: membina aplikasi sembang mudah

WBOY
WBOYasal
2023-12-18 08:13:311173semak imbas

golang WebSocket示例:构建一个简单的聊天应用

Golang WebSocket Contoh: Membina Aplikasi Sembang Mudah

Dengan perkembangan Internet, komunikasi masa nyata telah menarik lebih banyak perhatian. Sebagai protokol komunikasi masa nyata, WebSocket boleh mewujudkan sambungan berterusan antara pelanggan dan pelayan, menjadikan penghantaran data masa nyata dua hala mungkin. Artikel ini akan memperkenalkan cara menggunakan Golang untuk membina aplikasi sembang mudah untuk menghantar dan menerima mesej masa nyata melalui WebSocket.

Sebelum bermula, pastikan anda telah memasang persekitaran pembangunan Golang dengan betul pada komputer anda.

Pertama, kita perlu mengimport pakej "Gorilla Websocket", yang merupakan perpustakaan WebSocket yang biasa digunakan di Golang. Pasang menggunakan arahan berikut dalam terminal:

go get github.com/gorilla/websocket

Seterusnya, kami mencipta fail main.go dan mengimport pakej yang diperlukan:

package main

import (
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

Dalam fungsi utama, kami mentakrifkan fungsi pengendali WebSocket untuk mengendalikan permintaan sambungan WebSocket:

func wsHandler(w http.ResponseWriter, r *http.Request) {
    // 升级HTTP连接为WebSocket连接
    conn, err := websocket.Upgrade(w, r, nil, 1024, 1024)
    if err != nil {
        log.Println(err)
        return
    }

    // 处理WebSocket连接
    for {
        // 读取客户端发送的消息
        _, msg, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            break
        }

        // 将消息发送给所有连接的客户端
        for client := range clients {
            err := client.WriteMessage(websocket.TextMessage, msg)
            if err != nil {
                log.Println(err)
                client.Close()
                delete(clients, client)
            }
        }
    }

    // 关闭WebSocket连接
    conn.Close()
}

Dalam kod di atas, kami mula-mula menaik taraf sambungan HTTP kepada sambungan WebSocket, dan kemudian menggunakan gelung for untuk terus menerima mesej yang dihantar oleh pelanggan dan menghantar mesej ini kepada semua pelanggan yang disambungkan. Apabila ralat berlaku atau pelanggan memutuskan sambungan, kami menutup sambungan yang sepadan.

Seterusnya, kita perlu mentakrifkan klien pembolehubah global untuk menyimpan semua klien yang disambungkan:

var clients = make(map[*websocket.Conn]bool)

Kemudian, kami mengubah suai kod dalam fungsi utama, mengaitkan fungsi pemproses WebSocket dengan laluan "/ws" dan memulakan pelayan HTTP :

func main() {
    http.HandleFunc("/ws", wsHandler)

    err := http.ListenAndServe(":8000", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

Akhir sekali, kami boleh menggunakan pelayar atau alat klien WebSocket untuk menguji aplikasi sembang kami. Masukkan "http://localhost:8000" dalam penyemak imbas, buka konsol dan laksanakan kod JavaScript berikut:

var ws = new WebSocket("ws://localhost:8000/ws");

// 连接建立时触发的事件
ws.onopen = function() {
    console.log("连接成功");
};

// 收到消息时触发的事件
ws.onmessage = function(evt) {
    console.log("收到消息:" + evt.data);
};

// 发送消息
ws.send("Hello, World!");

Melalui kod di atas, kami akan menerima "Hello, World" daripada pelayan dan output dalam konsol.

Pada ketika ini, kami telah berjaya membina aplikasi sembang mudah yang menggunakan Golang dan WebSocket untuk menghantar dan menerima mesej masa nyata. Sudah tentu, ini hanyalah contoh asas dan anda boleh memanjangkan dan mengoptimumkannya mengikut keperluan anda sendiri. Saya harap artikel ini membantu anda, dan saya berharap anda lebih berjaya apabila membangunkan aplikasi komunikasi masa nyata menggunakan Golang dan WebSocket!

Atas ialah kandungan terperinci contoh golang WebSocket: membina aplikasi sembang mudah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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