Maison  >  Article  >  développement back-end  >  Exemple Golang WebSocket : création d'une application de chat simple

Exemple Golang WebSocket : création d'une application de chat simple

WBOY
WBOYoriginal
2023-12-18 08:13:311175parcourir

golang WebSocket示例:构建一个简单的聊天应用

Exemple Golang WebSocket : création d'une application de chat simple

Avec le développement d'Internet, la communication en temps réel a attiré de plus en plus d'attention. En tant que protocole de communication en temps réel, WebSocket peut établir une connexion persistante entre le client et le serveur, rendant possible la transmission bidirectionnelle de données en temps réel. Cet article explique comment utiliser Golang pour créer une application de chat simple permettant d'envoyer et de recevoir des messages en temps réel via WebSocket.

Avant de commencer, assurez-vous d'avoir correctement installé l'environnement de développement Golang sur votre ordinateur.

Tout d'abord, nous devons importer le package "Gorilla Websocket", qui est une bibliothèque WebSocket couramment utilisée dans Golang. Installez à l'aide de la commande suivante dans le terminal :

go get github.com/gorilla/websocket

Ensuite, nous créons un fichier main.go et importons les packages requis :

package main

import (
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

Dans la fonction principale, nous définissons une fonction de gestionnaire WebSocket pour gérer la demande de connexion WebSocket :

func wsHandler(w http.ResponseWriter, r *http.Request) {
    // 升级HTTP连接为WebSocket连接
    conn, err := websocket.Upgrade(w, r, nil, 1024, 1024)
    if err != nil {
        log.Println(err)
        return
    }

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

        // 将消息发送给所有连接的客户端
        for client := range clients {
            err := client.WriteMessage(websocket.TextMessage, msg)
            if err != nil {
                log.Println(err)
                client.Close()
                delete(clients, client)
            }
        }
    }

    // 关闭WebSocket连接
    conn.Close()
}

Dans le code ci-dessus, nous mettons d'abord à niveau la connexion HTTP vers une connexion WebSocket, puis utilisons une boucle for pour recevoir en continu les messages envoyés par le client et envoyer ces messages à tous les clients connectés. Lorsqu'une erreur se produit ou que le client se déconnecte, nous fermons la connexion correspondante.

Ensuite, nous devons définir une variable globale clients pour enregistrer tous les clients connectés :

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

Ensuite, nous modifions le code dans la fonction principale, associons la fonction du processeur WebSocket au chemin "/ws", et démarrons un serveur HTTP :

func main() {
    http.HandleFunc("/ws", wsHandler)

    err := http.ListenAndServe(":8000", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

Enfin, nous pouvons utiliser un navigateur ou un outil client WebSocket pour tester notre application de chat. Entrez "http://localhost:8000" dans le navigateur, ouvrez la console et exécutez le code JavaScript suivant :

var ws = new WebSocket("ws://localhost:8000/ws");

// 连接建立时触发的事件
ws.onopen = function() {
    console.log("连接成功");
};

// 收到消息时触发的事件
ws.onmessage = function(evt) {
    console.log("收到消息:" + evt.data);
};

// 发送消息
ws.send("Hello, World!");

Grâce au code ci-dessus, nous recevrons le message "Hello, World!" dans la console.

À ce stade, nous avons réussi à créer une application de chat simple qui utilise Golang et WebSocket pour envoyer et recevoir des messages en temps réel. Bien entendu, il ne s’agit que d’un exemple de base et vous pouvez l’étendre et l’optimiser en fonction de vos propres besoins. J'espère que cet article vous sera utile et je vous souhaite plus de succès dans le développement d'applications de communication en temps réel à l'aide de Golang et 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