Maison  >  Article  >  développement back-end  >  Comment utiliser WebSocket dans Golang pour la mise à jour des données en temps réel

Comment utiliser WebSocket dans Golang pour la mise à jour des données en temps réel

WBOY
WBOYoriginal
2023-12-18 09:06:451211parcourir

Comment utiliser WebSocket dans Golang pour la mise à jour des données en temps réel

Comment utiliser WebSocket dans Golang pour les mises à jour de données en temps réel

Présentation :
WebSocket est une technologie de communication conçue pour la communication en duplex intégral entre un navigateur Web et un serveur. Dans Golang, nous pouvons utiliser net/http et github.com/gorilla/websocket dans la bibliothèque standard pour implémenter la fonctionnalité WebSocket. Cet article explique comment utiliser WebSocket dans Golang pour les mises à jour des données en temps réel et fournit quelques exemples de code. net/httpgithub.com/gorilla/websocket来实现WebSocket功能。本文将介绍如何在Golang中使用WebSocket进行实时数据更新,并提供一些代码示例。

步骤:

第一步:创建HTTP服务器
首先,我们需要创建一个HTTP服务器来处理WebSocket连接请求。下面是一个简单的示例代码:

package main

import (
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        http.ServeFile(w, r, "index.html")
    })

    log.Println("HTTP server is starting at http://localhost:8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

这段代码创建了一个简单的HTTP服务器,它会将根路径("/")映射到一个名为index.html的静态文件。

第二步:处理WebSocket连接
接下来,我们需要修改HTTP服务器的代码,以便能够处理WebSocket连接请求。我们可以使用github.com/gorilla/websocket库来处理WebSocket连接。下面是修改后的示例代码:

package main

import (
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

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

    clients = make(map[*websocket.Conn]bool)
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        http.ServeFile(w, r, "index.html")
    })

    http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
        conn, err := upgrader.Upgrade(w, r, nil)
        if err != nil {
            log.Println("Failed to upgrade connection:", err)
            return
        }
        clients[conn] = true

        for {
            _, msg, err := conn.ReadMessage()
            if err != nil {
                log.Println("Failed to read message from client:", err)
                delete(clients, conn)
                break
            }

            for client := range clients {
                err := client.WriteMessage(websocket.TextMessage, msg)
                if err != nil {
                    log.Println("Failed to write message to client:", err)
                    client.Close()
                    delete(clients, conn)
                }
            }
        }
    })

    log.Println("WebSocket server is starting at ws://localhost:8080/ws")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

在这段代码中,我们创建了一个upgrader对象,并定义了一个clients变量来保存所有连接的客户端。当有新的WebSocket请求时,我们会将连接升级为WebSocket连接,并将其添加到clients变量中。然后,我们通过循环读取客户端发来的消息,并把消息发送给所有已连接的客户端。

第三步:创建前端页面
最后,我们需要创建一个前端页面来连接WebSocket服务器,并展示实时数据更新。下面是一个简单的HTML页面示例(index.html):

<!DOCTYPE html>
<html>

<head>
    <title>WebSocket Demo</title>
</head>

<body>
    <h1>WebSocket Demo</h1>

    <input type="text" id="message-input">
    <button onclick="send()">Send</button>

    <ul id="message-list"></ul>

    <script>
        var socket = new WebSocket("ws://localhost:8080/ws");

        socket.onmessage = function(event) {
            var message = document.createElement("li");
            message.textContent = event.data;
            document.getElementById("message-list").appendChild(message);
        };

        function send() {
            var input = document.getElementById("message-input");
            var message = input.value;
            input.value = "";

            socket.send(message);
        }
    </script>
</body>

</html>

这段代码创建了一个WebSocket连接并监听onmessage事件,当有消息到达时,将消息添加到一个ul

Étapes :


Première étape : créer un serveur HTTP

Tout d'abord, nous devons créer un serveur HTTP pour gérer les demandes de connexion WebSocket. Voici un exemple de code simple : 🎜rrreee🎜Ce code crée un serveur HTTP simple qui mappe le chemin racine ("/") à un fichier statique appelé index.html . 🎜🎜Étape 2 : Gérer les connexions WebSocket🎜Ensuite, nous devons modifier le code du serveur HTTP pour pouvoir gérer les demandes de connexion WebSocket. Nous pouvons utiliser la bibliothèque github.com/gorilla/websocket pour gérer les connexions WebSocket. Voici l'exemple de code modifié : 🎜rrreee🎜 Dans ce code, nous créons un objet upgrader et définissons une variable clients pour contenir tous les clients connectés. Lorsqu'il y a une nouvelle requête WebSocket, nous mettons à niveau la connexion vers une connexion WebSocket et l'ajoutons à la variable clients. Ensuite, nous lisons le message du client via une boucle et envoyons le message à tous les clients connectés. 🎜🎜Étape 3 : Créer une page frontale🎜Enfin, nous devons créer une page frontale pour nous connecter au serveur WebSocket et afficher les mises à jour des données en temps réel. Ce qui suit est un exemple simple de page HTML (index.html) : 🎜rrreee🎜Ce code crée une connexion WebSocket et écoute l'événement onmessage Lorsqu'un message arrive, ajoutez. le message à un élément ul pour affichage. De plus, une zone de saisie et un bouton d'envoi sont fournis pour que les utilisateurs puissent saisir des messages et les envoyer au serveur via WebSocket. 🎜🎜Résumé : 🎜Grâce aux étapes ci-dessus, nous pouvons utiliser WebSocket dans Golang pour les mises à jour des données en temps réel. En créant des serveurs HTTP, en gérant les connexions WebSocket et en interagissant avec les pages frontales, nous pouvons réaliser une communication de données en temps réel dans les applications Web. Bien entendu, il ne s’agit que d’un exemple simple qui devra peut-être être étendu et modifié en fonction des besoins spécifiques lors de l’utilisation réelle. J'espère que cet article vous a été utile et je vous souhaite du succès dans votre utilisation de WebSocket ! 🎜

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!

Déclaration:
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