Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menerima mesej Go WebSocket?

Bagaimana untuk menerima mesej Go WebSocket?

WBOY
WBOYasal
2024-06-02 14:47:57614semak imbas

Kaedah menerima mesej WebSocket dalam Go bergantung pada sisi klien dan pelayan: Klien: Gunakan fungsi ReadMessage untuk membaca mesej dan mengembalikan jenis mesej, muatan dan ralat. Pelayan: Baca kaedah ReadMessage klien yang disambungkan, yang juga mengembalikan jenis mesej, muatan dan ralat.

Go WebSocket 消息如何接收?

Bagaimana untuk menerima mesej Go WebSocket?

WebSocket ialah protokol komunikasi dupleks penuh yang membolehkan pelanggan dan pelayan berkomunikasi dalam kedua-dua arah selepas mewujudkan satu sambungan. Artikel ini menerangkan cara menerima mesej WebSocket dalam Go.

Pelanggan menerima mesej

Pada klien, anda boleh menerima mesej melalui fungsi ReadMessage: ReadMessage 函数接收消息:

import "github.com/gorilla/websocket"

type Message struct {
    Type int
    Payload []byte
}

func readMessage(conn *websocket.Conn) (*Message, error) {
    mt, r, err := conn.ReadMessage()
    if err != nil {
        return nil, err
    }

    return &Message{
        Type:    mt,
        Payload: r,
    }, nil
}

ReadMessage 函数返回三个值:消息类型 (mt)、消息负载 (r) 和一个错误 (err)。消息类型是一个整数值,表示消息的类型(文本、二进制等)。

服务器接收消息

在服务器端,可以通过客户端连接的 ReadMessage

func (c *Client) readMessage() (*Message, error) {
    mt, r, err := c.conn.ReadMessage()
    if err != nil {
        return nil, err
    }

    return &Message{
        Type:    mt,
        Payload: r,
    }, nil
}

ReadMessage Fungsi mengembalikan tiga nilai: jenis mesej (mt ), muatan mesej (r), dan ralat (err). Jenis mesej ialah nilai integer yang menunjukkan jenis mesej (teks, binari, dll.).

Pelayan menerima mesej

Di bahagian pelayan, anda boleh menerima mesej melalui kaedah ReadMessage sambungan klien:

package main

import (
    "fmt"
    "log"

    "github.com/gorilla/websocket"
)

func main() {
    conn, _, err := websocket.DefaultDialer.Dial("ws://example.com/ws", nil)
    if err != nil {
        log.Fatal("dial:", err)
    }
    defer conn.Close()

    for {
        _, message, err := conn.ReadMessage()
        if err != nil {
            if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway,
                websocket.CloseAbnormalClosure) {
                log.Fatal("unexpected close:", err)
            }
            continue
        }

        fmt.Printf("received: %s\n", message)
    }
}

Kes praktikal🎜🎜Berikut adalah kaedah yang menerima WebSocket mesej dan mengeluarkannya ke konsol contoh klien Go: 🎜
package main

import (
    "database/sql"
    "fmt"
    "log"

    "github.com/gorilla/websocket"
)

func main() {
    // 数据库设置...

    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Fatal("upgrade:", err)
    }
    defer conn.Close()

    for {
        _, message, err := conn.ReadMessage()
        if err != nil {
            if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway,
                websocket.CloseAbnormalClosure) {
                log.Fatal("unexpected close:", err)
            }
            continue
        }

        // 将消息保存到数据库...
    }
}
🎜Begitu juga, berikut ialah contoh pelayan Go yang menerima mesej WebSocket dan menyimpannya dalam pangkalan data: 🎜rrreee

Atas ialah kandungan terperinci Bagaimana untuk menerima mesej Go 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