Rumah >pembangunan bahagian belakang >Golang >Cara menggunakan bahasa Go untuk melaksanakan penyelenggaraan sambungan panjang Websocket

Cara menggunakan bahasa Go untuk melaksanakan penyelenggaraan sambungan panjang Websocket

王林
王林asal
2023-12-14 13:47:241552semak imbas

Cara menggunakan bahasa Go untuk melaksanakan penyelenggaraan sambungan panjang Websocket

Cara menggunakan bahasa Go untuk melaksanakan penyelenggaraan sambungan lama Websocket

Websocket ialah protokol yang disediakan oleh HTML5 yang boleh mencapai komunikasi dua hala antara pelayan dan pelanggan. Dalam pembangunan sebenar, banyak senario memerlukan mengekalkan sambungan yang panjang untuk menolak data dalam masa nyata atau melaksanakan fungsi pemesejan segera. Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk melaksanakan penyelenggaraan sambungan panjang Websocket, termasuk contoh kod khusus.

1 Bina persekitaran pembangunan bahasa Go
Pertama, kita perlu membina persekitaran pembangunan bahasa Go. Untuk operasi tertentu, sila rujuk panduan pemasangan di tapak web rasmi bahasa Go.

2. Buat pelayan WebSocket
Seterusnya, kami mula mencipta pelayan WebSocket. Mula-mula, kita perlu mengimport pustaka github.com/gorilla/websocket dan mentakrifkan pembolehubah upgrade global untuk meningkatkan sambungan HTTP kepada sambungan WebSocket. github.com/gorilla/websocket库,并定义一个全局的upgrader变量,用于升级HTTP连接为WebSocket连接。

import (
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
}

然后,我们创建一个处理函数wsHandler,处理客户端的WebSocket连接请求。

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

    // 循环读取客户端发送的消息
    for {
        // 读取消息
        msgType, msg, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            return
        }

        // 打印消息
        log.Printf("Received: %s
", msg)

        // 响应消息
        err = conn.WriteMessage(msgType, msg)
        if err != nil {
            log.Println(err)
            return
        }
    }
}

三、启动WebSocket服务器
接下来,我们需要将上述wsHandler

func main() {
    http.HandleFunc("/ws", wsHandler) // 注册处理函数
    log.Fatal(http.ListenAndServe(":8000", nil)) // 启动服务器
}

Kemudian, kami mencipta fungsi pemprosesan wsHandler untuk mengendalikan permintaan sambungan WebSocket pelanggan.

// 创建WebSocket连接
const socket = new WebSocket('ws://localhost:8000/ws');

// 打开连接
socket.addEventListener('open', function (event) {
    socket.send('Hello Server');
});

// 接收消息
socket.addEventListener('message', function (event) {
    console.log('Received: ' + event.data);
});

// 关闭连接
socket.addEventListener('close', function (event) {
    console.log('Connection closed');
});

3 Mulakan pelayan WebSocket

Seterusnya, kita perlu mendaftarkan fungsi wsHandler di atas sebagai fungsi pemprosesan perkhidmatan HTTP dan mulakan port mendengar pelayan.

rrreee

4 Cipta klien WebSocket🎜Akhir sekali, kami mencipta klien WebSocket yang mudah untuk menguji kefungsian pelayan. Kami boleh menggunakan JavaScript atau alatan lain untuk mencipta klien WebSocket Di sini kami mengambil JavaScript sebagai contoh. 🎜rrreee🎜Di atas ialah contoh kod penggunaan bahasa Go untuk mengekalkan sambungan lama Websocket. Melalui contoh ini, kami boleh mewujudkan sambungan panjang WebSocket yang mudah dan mencapai komunikasi dua hala masa nyata antara pelayan dan pelanggan. Dalam pembangunan sebenar, kami boleh mengembangkan dan mengoptimumkan kod mengikut keperluan khusus untuk menyesuaikan diri dengan senario dan keperluan perniagaan yang berbeza. 🎜

Atas ialah kandungan terperinci Cara menggunakan bahasa Go untuk melaksanakan penyelenggaraan sambungan panjang Websocket. 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