>  기사  >  백엔드 개발  >  golang WebSocket과 JSON의 결합: 데이터 전송 및 파싱 구현

golang WebSocket과 JSON의 결합: 데이터 전송 및 파싱 구현

王林
王林원래의
2023-12-17 15:06:471217검색

golang WebSocket与JSON的结合:实现数据传输和解析

golang WebSocket과 JSON의 결합: 데이터 전송 및 구문 분석 실현

현대 웹 개발에서는 실시간 데이터 전송이 점점 더 중요해지고 있습니다. WebSocket은 양방향 통신을 달성하는 데 사용되는 프로토콜입니다. 기존 HTTP 요청-응답 모델과 달리 WebSocket을 사용하면 서버가 클라이언트에 데이터를 적극적으로 푸시할 수 있습니다. JSON(JavaScript Object Notation)은 간결하고 읽기 쉽고 다양한 프로그래밍 언어 간 구문 분석이 쉬운 데이터 교환을 위한 경량 형식입니다.

이 기사에서는 Golang을 사용하여 WebSocket과 JSON을 결합하여 데이터 전송 및 구문 분석을 수행하는 방법을 소개합니다. Golang의 내장 패키지 net/httpgithub.com/gorilla/websocket를 사용하여 WebSocket 연결을 처리하고 encoding/json을 사용하여 JSON 데이터를 구문 분석하고 생성합니다. net/httpgithub.com/gorilla/websocket来处理WebSocket连接,并使用encoding/json来解析和生成JSON数据。

首先,我们需要安装gorilla/websocket包。你可以使用以下命令来安装:

go get github.com/gorilla/websocket

接下来,我们可以开始编写代码了。

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
    "github.com/gorilla/websocket"
)

type Message struct {
    Content string `json:"content"`
}

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

func echoHandler(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }
    defer conn.Close()

    for {
        // 读取客户端发送的消息
        _, message, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            break
        }

        // 解析JSON数据
        var msg Message
        err = json.Unmarshal(message, &msg)
        if err != nil {
            log.Println(err)
            break
        }

        // 输出收到的消息
        fmt.Println("收到消息:", msg.Content)

        // 发送响应消息
        response := Message{
            Content: "你发送的消息是:" + msg.Content,
        }

        // 将响应转换为JSON格式
        jsonResponse, err := json.Marshal(response)
        if err != nil {
            log.Println(err)
            break
        }

        // 发送JSON响应
        err = conn.WriteMessage(websocket.TextMessage, jsonResponse)
        if err != nil {
            log.Println(err)
            break
        }
    }
}

func main() {
    http.HandleFunc("/ws", echoHandler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

上述代码包含了一个WebSocket处理函数echoHandler,它接收客户端的WebSocket连接并处理消息的收发。在函数内部,我们首先读取客户端发送的消息,并解析为Message结构体。然后,我们输出收到的消息,生成响应消息,并将响应转换为JSON格式。最后,我们使用conn.WriteMessage将JSON响应发送给客户端。

在主函数中,我们将WebSocket处理函数echoHandler注册到/ws

먼저 gorilla/websocket 패키지를 설치해야 합니다. 다음 명령을 사용하여 설치할 수 있습니다:

var socket = new WebSocket("ws://localhost:8080/ws");
socket.onopen = function () {
    console.log('连接已打开');
    var message = {
        content: 'Hello Server!'
    };
    socket.send(JSON.stringify(message));
};
socket.onmessage = function (event) {
    console.log('收到服务器的响应:', JSON.parse(event.data));
    socket.close();
};
socket.onclose = function () {
    console.log('连接已关闭');
};

다음으로 코드 작성을 시작할 수 있습니다.

rrreee

위 코드에는 클라이언트의 WebSocket 연결을 수신하고 메시지 송수신을 처리하는 WebSocket 처리 함수 echoHandler가 포함되어 있습니다. 함수 내에서 먼저 클라이언트가 보낸 메시지를 읽고 Message 구조로 구문 분석합니다. 그런 다음 수신된 메시지를 출력하고, 응답 메시지를 생성하고, 응답을 JSON 형식으로 변환합니다. 마지막으로 conn.WriteMessage를 사용하여 JSON 응답을 클라이언트에 보냅니다.

메인 함수에서는 WebSocket 처리 함수 echoHandler/ws 경로에 등록하고 로컬 8080 포트를 수신합니다. 🎜🎜프로그램을 컴파일하고 실행한 후 브라우저에서 WebSocket 연결을 열면 JavaScript의 WebSocket 개체를 통해 JSON 데이터를 주고받을 수 있습니다. 다음은 간단한 JavaScript 코드 예입니다. 🎜rrreee🎜 위의 JavaScript 코드에서는 WebSocket 연결을 생성하고 연결이 열릴 때 메시지 내용이 포함된 JSON 데이터를 보냅니다. 서버로부터 응답이 수신되면 응답 메시지를 구문 분석하여 인쇄하고 WebSocket 연결을 닫습니다. 🎜🎜위는 WebSocket 및 JSON과 결합된 Golang을 사용하여 데이터 전송 및 구문 분석을 구현하기 위한 일부 샘플 코드입니다. WebSocket과 JSON을 사용하면 클라이언트와 서버 간에 구조화된 데이터를 쉽게 전송하고 구문 분석하여 실시간 데이터 상호 작용이 가능합니다. 특정 사용 사례에 적합한 코드를 작성할 때 필요한 오류 처리 및 데이터 유효성 검사를 포함하는 것을 기억하세요. 이 기사가 도움이 되기를 바랍니다! 🎜

위 내용은 golang WebSocket과 JSON의 결합: 데이터 전송 및 파싱 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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