Maison > développement back-end > Golang > le corps du texte

Combinaison de golang WebSocket et JSON : réalisation de la transmission et de l'analyse des données

王林
Libérer: 2023-12-17 15:06:47
original
1136 Les gens l'ont consulté

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

La combinaison de golang WebSocket et JSON : réaliser la transmission et l'analyse des données

Dans le développement Web moderne, la transmission de données en temps réel devient de plus en plus importante. WebSocket est un protocole utilisé pour établir une communication bidirectionnelle. Contrairement au modèle de requête-réponse HTTP traditionnel, WebSocket permet au serveur de transmettre activement des données au client. JSON (JavaScript Object Notation) est un format léger d'échange de données, concis, facile à lire et à analyser entre différents langages de programmation.

Cet article expliquera comment utiliser Golang pour combiner WebSocket et JSON afin de réaliser la transmission et l'analyse de données. Nous utiliserons les packages intégrés de Golang net/http et github.com/gorilla/websocket pour gérer les connexions WebSocket, et encoding/json pour Analysez et générez des données JSON. net/httpgithub.com/gorilla/websocket来处理WebSocket连接,并使用encoding/json来解析和生成JSON数据。

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

go get github.com/gorilla/websocket
Copier après la connexion

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

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))
}
Copier après la connexion

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

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

Tout d'abord, nous devons installer le package gorilla/websocket. Vous pouvez l'installer en utilisant la commande suivante :

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('连接已关闭');
};
Copier après la connexion
Ensuite, nous pouvons commencer à écrire du code.

rrreee

Le code ci-dessus contient une fonction de traitement WebSocket echoHandler, qui reçoit la connexion WebSocket du client et traite l'envoi et la réception des messages. À l'intérieur de la fonction, nous lisons d'abord le message envoyé par le client et l'analysons dans une structure Message. Nous générons ensuite le message reçu, générons le message de réponse et convertissons la réponse au format JSON. Enfin, nous utilisons conn.WriteMessage pour envoyer la réponse JSON au client.

Dans la fonction principale, nous enregistrons la fonction de traitement WebSocket echoHandler sur la route /ws et écoutons le port 8080 local. 🎜🎜Après avoir compilé et exécuté le programme, ouvrez la connexion WebSocket dans le navigateur et vous pourrez envoyer et recevoir des données JSON via l'objet WebSocket de JavaScript. Voici un exemple de code JavaScript simple : 🎜rrreee🎜 Dans le code JavaScript ci-dessus, nous créons une connexion WebSocket et envoyons une donnée JSON contenant le contenu du message lorsque la connexion est ouverte. Lorsque la réponse du serveur est reçue, nous analysons et imprimons le message de réponse, puis fermons la connexion WebSocket. 🎜🎜Ci-dessus sont quelques exemples de codes pour utiliser Golang combiné avec WebSocket et JSON pour réaliser la transmission et l'analyse de données. En utilisant WebSocket et JSON, nous pouvons facilement transférer et analyser des données structurées entre clients et serveurs, permettant ainsi une interaction de données en temps réel. Lorsque vous écrivez du code qui fonctionne pour votre cas d'utilisation spécifique, n'oubliez pas d'inclure la gestion des erreurs et la validation des données nécessaires. J'espère que cet article vous aidera ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!