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

Guide de développement de Golang Websocket : implémentation de la fonction de gestion des horaires en ligne pour plusieurs personnes

WBOY
Libérer: 2023-12-02 09:09:26
original
634 Les gens l'ont consulté

golang Websocket开发指南:实现多人在线日程管理功能

Guide de développement de Golang Websocket : Implémentation d'une fonction de gestion d'horaires en ligne pour plusieurs personnes

Introduction :
Avec le rythme rapide et les exigences multitâches de la vie moderne, nous devons souvent procéder à des ajustements et à une coordination des horaires. La fonction de gestion des horaires en ligne pour plusieurs personnes peut aider plusieurs personnes à collaborer et à partager des horaires en temps réel, améliorant ainsi l'efficacité du travail. Cet article expliquera comment utiliser la technologie Golang et Websocket pour implémenter des fonctions de gestion d'horaires en ligne pour plusieurs personnes et joindra des exemples de code spécifiques.

  1. Environnement et dépendances :
  2. Golang 1.13 ou supérieur
  3. Framework Gin Web
  4. Bibliothèque Gorilla Websocket
  5. Projet de création et initialisation :
    Tout d'abord, nous devons créer un projet Golang vide et le placer dans le répertoire racine du projet Initialisez un nouveau module Go à l'aide de la commande suivante :

    go mod init schedule
    Copier après la connexion

Ensuite, nous devons introduire les dépendances requises dans le projet :

go get -u github.com/gin-gonic/gin
go get -u github.com/gorilla/websocket
Copier après la connexion
  1. Créer un serveur Websocket :
    Ensuite, nous créerons un serveur Websocket pour l'implémentation de plusieurs -fonction de gestion des horaires en ligne pour une personne. Dans le répertoire racine du projet, créez un fichier nommé main.go et ajoutez le code suivant dans le fichier : main.go的文件,并在文件中添加以下代码:
package main

import (
    "log"
    "net/http"

    "github.com/gin-gonic/gin"
    "github.com/gorilla/websocket"
)

func main() {
    router := gin.Default()

    upgrader := websocket.Upgrader{
        CheckOrigin: func(r *http.Request) bool {
            return true
        },
    }

    router.GET("/ws", func(c *gin.Context) {
        conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
        if err != nil {
            log.Println("Failed to upgrade connection:", err)
            return
        }

        // TODO: 处理连接和消息
    })

    router.Run(":8000")
}
Copier après la connexion

上述代码中,我们使用了Gin框架创建了一个简单的HTTP服务器,并在/ws路径上注册了一个Websocket路由。在路由处理函数中,我们将Upgrade HTTP连接升级为Websocket连接,并获取到与客户端建立的连接。

  1. 处理连接和消息:
    在我们的Websocket服务器中,我们需要实现对连接的处理和消息的广播功能。在路由处理函数中添加以下代码:
connections := make(map[*websocket.Conn]bool) // 存储所有连接的映射表

router.GET("/ws", func(c *gin.Context) {
    conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
    if err != nil {
        log.Println("Failed to upgrade connection:", err)
        return
    }

    connections[conn] = true

    for {
        _, msg, err := conn.ReadMessage()
        if err != nil {
            log.Println("Error reading message:", err)
            delete(connections, conn)
            conn.Close()
            break
        }

        // 广播消息给所有连接
        for conn := range connections {
            err := conn.WriteMessage(websocket.TextMessage, msg)
            if err != nil {
                log.Println("Error broadcasting message:", err)
                delete(connections, conn)
                conn.Close()
            }
        }
    }
})
Copier après la connexion

上面的代码中,我们使用一个映射表connections来存储所有连接。当有新的连接建立时,我们将该连接添加到映射表中。同时,我们通过一个无限循环来读取来自客户端的消息,并将该消息广播给所有连接。

  1. 前端实现:
    最后,我们需要在前端实现一个简单的界面来测试我们的多人在线日程管理功能。在项目的根目录下,创建一个名为index.html
  2. <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Schedule</title>
    </head>
    
    <body>
        <h1>Schedule</h1>
    
        <input type="text" id="message" placeholder="Enter your message">
        <button id="send">Send</button>
    
        <ul id="messages"></ul>
    
        <script>
            const socket = new WebSocket("ws://localhost:8000/ws");
    
            const messageInput = document.getElementById("message");
            const sendButton = document.getElementById("send");
            const messagesList = document.getElementById("messages");
    
            sendButton.addEventListener("click", () => {
                const message = messageInput.value;
                socket.send(message);
                messageInput.value = "";
            });
    
            socket.addEventListener("message", (event) => {
                const message = document.createElement("li");
                message.innerHTML = event.data;
                messagesList.appendChild(message);
            });
        </script>
    </body>
    
    </html>
    Copier après la connexion
Dans le code ci-dessus, nous avons utilisé le framework Gin pour créer un simple HTTP serveur et enregistré une route Websocket sur le chemin /ws. Dans la fonction de traitement de routage, nous mettons à niveau la connexion HTTP de mise à niveau vers une connexion Websocket et obtenons la connexion établie avec le client.

    Traitement des connexions et des messages :

    Dans notre serveur Websocket, nous devons implémenter des fonctions de traitement des connexions et de diffusion des messages. Ajoutez le code suivant dans la fonction de traitement des routes :

    rrreee

    Dans le code ci-dessus, nous utilisons une table de mappage connections pour stocker toutes les connexions. Lorsqu'une nouvelle connexion est établie, nous ajoutons la connexion à la table de mappage. En même temps, nous lisons le message du client via une boucle infinie et diffusons le message à toutes les connexions.

      Implémentation front-end :
    • Enfin, nous devons implémenter une interface simple sur le front-end pour tester notre fonction de gestion d'horaires en ligne multi-personnes. Dans le répertoire racine du projet, créez un fichier nommé index.html et ajoutez le code suivant dans le fichier :
    • rrreee
    • Dans le code ci-dessus, nous utilisons l'objet WebSocket de JavaScript pour communiquer avec le serveur Établissez une connexion et écoutez les entrées des utilisateurs et les messages du serveur. Lorsque l'utilisateur clique sur le bouton Envoyer, nous envoyons le message saisi au serveur. Parallèlement, lorsqu'un message est reçu du serveur, nous ajoutons le message à la liste des messages sur l'interface.
    🎜Résumé :🎜Cet article explique comment utiliser la technologie Golang et Websocket pour mettre en œuvre des fonctions de gestion d'horaires en ligne pour plusieurs personnes. Nous avons dans un premier temps créé un serveur Websocket et implémenté les fonctions de traitement des connexions et de diffusion des messages. Ensuite, nous avons implémenté une interface simple sur le front-end pour tester nos fonctionnalités. Grâce à cet article, j'espère que les lecteurs pourront comprendre et maîtriser les méthodes et techniques d'utilisation de Golang et Websocket pour réaliser des fonctions similaires. 🎜🎜Liens de référence :🎜🎜🎜Framework Gin : https://github.com/gin-gonic/gin🎜🎜Bibliothèque Gorilla Websocket : https://github.com/gorilla/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!

    É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!