Go에서 WebSocket 메시지를 수신하는 방법은 클라이언트 측과 서버 측에 따라 다릅니다. 클라이언트: ReadMessage 함수를 사용하여 메시지를 읽고 메시지 유형, 페이로드 및 오류를 반환합니다. 서버: 메시지 유형, 페이로드 및 오류도 반환하는 연결된 클라이언트의 ReadMessage 메서드를 읽습니다.
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) } }
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 } // 将消息保存到数据库... } }
위 내용은 Go WebSocket 메시지를 어떻게 수신하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!