Go WebSocket은 어떻게 메시지 형식을 확장하고 사용자 정의합니까?

WBOY
풀어 주다: 2024-06-01 17:29:02
원래의
450명이 탐색했습니다.

예, MessageHandler 또는 하위 프로토콜을 사용하여 Go WebSocket 메시지 형식을 맞춤설정할 수 있습니다. MessageHandler를 사용하면 메시지 처리 논리를 직접 정의할 수 있는 반면, 하위 프로토콜은 연결을 설정하기 전에 하위 프로토콜을 협상하는 방법을 제공합니다. 구체적인 단계는 다음과 같습니다. MessageHandler를 사용하여 메시지 형식을 사용자 정의합니다. 새 WebSocketConn을 생성하여 업그레이드 프로그램에 전달합니다. WebSocket은 MessageHandler 인터페이스에서 OnMessage 및 OnOpen 메서드를 정의하여 메시지 처리 및 연결 설정 처리 논리를 사용자 정의합니다. 하위 프로토콜: 업그레이드 프로그램에 전달된 하위 프로토콜 추가 매개변수는 WebSocketConn의 Subprotocol() 메서드를 통해 결정된 프로토콜에 액세스합니다. 이러한 메서드를 통해 특정 요구 사항에 따라 Go WebSocket의 메시지 형식을 쉽게 확장하고 사용자 정의할 수 있습니다.

Go WebSocket 如何扩展和自定义消息格式?

Go WebSocket 메시지 형식 사용자 정의

WebSocket은 클라이언트와 서버 간의 전이중 통신 채널 설정을 허용하는 프로토콜입니다. WebSocket 메시지는 일반적으로 JSON 형식을 사용하여 전송되지만 때로는 메시지 형식을 사용자 정의해야 할 수도 있습니다. Go는 이를 달성하기 위한 여러 가지 방법을 제공합니다.

MessageHandler 사용

MessageHandler 인터페이스는 두 가지 메서드를 정의합니다.

type MessageHandler interface {
    // OnMessage 实现 ReadMessage 方法。
    OnMessage(message []byte)
    // OnOpen 实现对 WebSocket 连接建立的处理。
    OnOpen()
}
로그인 후 복사

MessageHandler를 사용하려면 새 WebSocketConn을 생성하여 업그레이드 프로그램에 전달할 수 있습니다.WebSocket:

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

ws, err := upgrader.Upgrade(w, r, wsConfig, wsHandler{})
로그인 후 복사

wsHandler는 다음을 구현해야 합니다. 위에 정의된 MessageHandler 인터페이스. wsHandler 应该实现上面定义的 MessageHandler 接口。

// wsHandler 定义新的消息处理程序。
type wsHandler struct{}

// OnMessage 处理新消息。
func (wsHandler) OnMessage(message []byte) {
    // 自定义消息处理逻辑
}

// OnOpen 处理连接建立。
func (wsHandler) OnOpen() {
    // 可选的连接建立处理逻辑
}
로그인 후 복사

使用 Subprotocols

WebSocket 允许双方在建立连接之前协商子协议。要使用子协议,可以将 Subprotocols 参数传递给 upgrader:

upgrader := websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
    Subprotocols:    []string{"your-protocol"},
}
로그인 후 복사

然后,可以通过 WebSocketConn 的 Subprotocol() 方法访问确定的协议:

ws, _ := upgrader.Upgrade(w, r, wsConfig, wsHandler{})
protocol := ws.Subprotocol()
로그인 후 복사

实战案例

假设我们希望为聊天应用程序自定义消息格式。消息将包含字段:

  • type: 消息类型(例如,text、image)。
  • sender: 发送者。
  • content: 消息内容。

我们可以创建以下自定义消息类型:

type Message struct {
    Type     string `json:"type"`
    Sender   string `json:"sender"`
    Content  string `json:"content"`
}
로그인 후 복사

然后,我们可以更新 wsHandler

func (wsHandler) OnMessage(message []byte) {
    var msg Message
    if err := json.Unmarshal(message, &msg); err != nil {
        log.Println(err)
        return
    }

    switch msg.Type {
    case "text":
        // 处理文本消息
    case "image":
        // 处理图片消息
    default:
        log.Printf("未知消息类型:%s", msg.Type)
    }
}
로그인 후 복사

하위 프로토콜 사용

🎜🎜WebSocket을 사용하면 연결을 설정하기 전에 양 당사자가 하위 프로토콜을 협상할 수 있습니다. 하위 프로토콜을 사용하려면 Subprotocols 매개변수를 업그레이드 프로그램에 전달할 수 있습니다: 🎜rrreee🎜 그런 다음 WebSocketConn의 Subprotocol() 메서드를 통해 결정된 프로토콜에 액세스할 수 있습니다: 🎜rrreee 🎜🎜연습 사례 🎜🎜🎜 채팅 애플리케이션의 메시지 형식을 사용자 정의한다고 가정해 보겠습니다. 메시지에는 다음 필드가 포함됩니다: 🎜
  • type: 메시지 유형(예: 텍스트, 이미지).
  • 발신자: 발신자.
  • 내용: 메시지 내용.
🎜다음과 같은 사용자 정의 메시지 유형을 생성할 수 있습니다: 🎜rrreee🎜 그런 다음 wsHandler를 업데이트하여 사용자 정의 메시지를 처리할 수 있습니다: 🎜rrreee🎜다음 지침에 따라 Go WebSocket을 메시지 형식은 특정 요구 사항에 맞게 쉽게 확장하고 사용자 정의할 수 있습니다. 🎜

위 내용은 Go WebSocket은 어떻게 메시지 형식을 확장하고 사용자 정의합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿