Maison >développement back-end >Golang >Tutoriel golang WebSocket : Comment établir une communication en temps réel

Tutoriel golang WebSocket : Comment établir une communication en temps réel

王林
王林original
2023-12-17 13:54:361343parcourir

golang WebSocket教程:如何实现实时通信

Tutoriel Golang WebSocket : Comment parvenir à une communication en temps réel

Tout d'abord, présentons ce qu'est WebSocket. WebSocket est un protocole de communication full-duplex entre un navigateur Web et un serveur. Contrairement au protocole HTTP, WebSocket permet au serveur de transmettre des données au client et peut mettre en œuvre une communication en temps réel, des fonctions événementielles et autres.

Dans ce tutoriel, nous utiliserons Golang pour implémenter un simple serveur WebSocket. Nous montrerons comment établir une connexion WebSocket, envoyer et recevoir des messages, et illustrerons avec des exemples de code concrets.

Tout d'abord, nous devons importer le package WebSocket de Golang :

import (
    "log"
    "net/http"
    "github.com/gorilla/websocket"
)

Ensuite, nous devons définir un programme de mise à niveau WebSocket (upgrader) pour mettre à niveau le protocole HTTP vers le protocole WebSocket :

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

Ensuite, nous devons définir un gestionnaire WebSocket Connect fonction. Cette fonction sera enregistrée en tant que gestionnaire HTTP et sera appelée à chaque fois qu'il y aura une demande de connexion WebSocket :

func handleWebSocket(w http.ResponseWriter, r *http.Request) {
    // 将HTTP连接升级为WebSocket连接
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }
    // 在新的goroutine中处理WebSocket连接
    go handleWebSocketConnection(conn)
}

Dans la fonction qui gère la connexion WebSocket, nous devons définir une boucle pour gérer la réception et l'envoi de messages :

func handleWebSocketConnection(conn *websocket.Conn) {
    for {
        // 读取客户端发送的消息
        _, msg, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            return
        }
        // 打印接收到的消息
        log.Println("Received message:", string(msg))
        
        // 发送消息给客户端
        err = conn.WriteMessage(websocket.TextMessage, []byte("Hello, client!"))
        if err != nil {
            log.Println(err)
            return
        }
    }
}

Maintenant, il nous suffit d'enregistrer la fonction ci-dessus en tant que gestionnaire HTTP et de démarrer un serveur HTTP :

func main() {
    // 注册WebSocket处理器
    http.HandleFunc("/ws", handleWebSocket)
    // 启动HTTP服务器
    log.Println("WebSocket server started on localhost:8080")
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal(err)
    }
}

À ce stade, nous avons terminé un simple serveur WebSocket. Lorsqu'un client se connecte au serveur via WebSocket, le serveur recevra le message envoyé par le client et répondra avec un message fixe.

Pour tester le serveur, nous pouvons utiliser un plug-in de navigateur tel que "Simple WebSocket Client", saisir l'adresse du serveur ws://localhost:8080/ws et nous connecter. Entrez le message dans la boîte de message du plug-in et envoyez-le. Nous pourrons voir le message reçu dans le terminal et répondre au client en même temps.

Ce qui précède est notre tutoriel de base sur l'utilisation de Golang pour implémenter WebSocket. WebSocket a un grand potentiel en matière de communication en temps réel, basée sur des événements, etc., et peut être utilisé dans des applications de chat, la visualisation de données en temps réel et d'autres scénarios. Grâce à ce didacticiel, j'espère qu'il pourra vous aider à comprendre et à utiliser 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