ホームページ >バックエンド開発 >Golang >golang WebSocketとJSONの組み合わせ:データ送信と解析を実現

golang WebSocketとJSONの組み合わせ:データ送信と解析を実現

王林
王林オリジナル
2023-12-17 15:06:471256ブラウズ

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

golang WebSocket と JSON の組み合わせ: データ送信と解析の実現

現代の Web 開発では、リアルタイムのデータ送信がますます重要になっています。 WebSocket は双方向通信を実現するために使用されるプロトコルで、従来の HTTP リクエスト/レスポンス モデルとは異なり、WebSocket を使用すると、サーバーがクライアントにデータをアクティブにプッシュできます。 JSON (JavaScript Object Notation) は、簡潔で読みやすく、異なるプログラミング言語間で解析しやすいデータ交換用の軽量形式です。

この記事では、Golang を使用して WebSocket と JSON を組み合わせ、データの送信と解析を実現する方法を紹介します。 Golang の組み込みパッケージ 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 接続を受信し、メッセージの送受信を処理する WebSocket 処理関数 echoHandler が含まれています。関数内では、まずクライアントから送信されたメッセージを読み取り、それを Message 構造に解析します。次に、受信したメッセージを出力し、応答メッセージを生成し、応答を JSON 形式に変換します。最後に、conn.WriteMessage を使用して JSON 応答をクライアントに送信します。

main 関数では、WebSocket 処理関数 echoHandler/ws ルートに登録し、ローカル 8080 ポートをリッスンします。

プログラムをコンパイルして実行した後、ブラウザで WebSocket 接続を開くと、JavaScript の WebSocket オブジェクトを通じて JSON データを送受信できるようになります。以下は簡単な JavaScript コードの例です。

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('连接已关闭');
};

上記の JavaScript コードでは、WebSocket 接続を作成し、接続が開かれたときにメッセージの内容を含む JSON データを送信します。サーバーからの応答を受信すると、応答メッセージを解析して出力し、WebSocket 接続を閉じます。

上記は、Golang を使用して WebSocket と JSON を組み合わせ、データ送信と解析を実現するサンプル コードです。 WebSocket と JSON を使用すると、クライアントとサーバー間で構造化データを簡単に転送および解析でき、リアルタイムのデータ対話が可能になります。特定のユースケースで機能するコードを作成するときは、必要なエラー処理とデータ検証を忘れずに含めてください。この記事がお役に立てば幸いです!

以上がgolang WebSocketとJSONの組み合わせ:データ送信と解析を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。