>  기사  >  백엔드 개발  >  Go WebSocket 메시지를 어떻게 수신하나요?

Go WebSocket 메시지를 어떻게 수신하나요?

WBOY
WBOY원래의
2024-06-02 14:47:57613검색

Go에서 WebSocket 메시지를 수신하는 방법은 클라이언트 측과 서버 측에 따라 다릅니다. 클라이언트: ReadMessage 함수를 사용하여 메시지를 읽고 메시지 유형, 페이로드 및 오류를 반환합니다. 서버: 메시지 유형, 페이로드 및 오류도 반환하는 연결된 클라이언트의 ReadMessage 메서드를 읽습니다.

Go WebSocket 消息如何接收?

Go WebSocket 메시지를 받는 방법은 무엇입니까?

WebSocket은 단일 연결을 설정한 후 클라이언트와 서버가 양방향으로 통신할 수 있게 해주는 전이중 통신 프로토콜입니다. 이 문서에서는 Go에서 WebSocket 메시지를 수신하는 방법을 설명합니다.

클라이언트가 메시지를 받습니다

클라이언트에서 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 이 함수는 세 가지 값을 반환합니다. 메시지 유형(mt ), 메시지 페이로드(r) 및 오류(err)입니다. 메시지 유형은 메시지 유형(텍스트, 바이너리 등)을 나타내는 정수 값입니다.

서버가 메시지를 수신합니다

서버측에서는 클라이언트 연결의 ReadMessage 메소드를 통해 메시지를 수신할 수 있습니다.

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)
    }
}

실제 사례🎜🎜다음은 WebSocket을 수신하는 메소드입니다. 메시지를 콘솔에 출력합니다. 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
        }

        // 将消息保存到数据库...
    }
}
🎜마찬가지로 다음은 WebSocket 메시지를 수신하여 데이터베이스에 저장하는 Go 서버의 예입니다. 🎜rrreee

위 내용은 Go WebSocket 메시지를 어떻게 수신하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.