Bagaimana untuk menerima mesej Go WebSocket?

WBOY
Lepaskan: 2024-06-02 14:47:57
asal
553 orang telah melayarinya

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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)
    }
}
Salin selepas log masuk

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
        }

        // 将消息保存到数据库...
    }
}
Salin selepas log masuk
🎜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!

Label berkaitan:
go
sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!