Maison > développement back-end > Golang > Apprendre les fonctions de programmation réseau en langage Go et mettre en œuvre une salle de discussion sur serveur WebSocket ?

Apprendre les fonctions de programmation réseau en langage Go et mettre en œuvre une salle de discussion sur serveur WebSocket ?

王林
Libérer: 2023-07-30 18:43:54
original
913 Les gens l'ont consulté

Apprenez les fonctions de programmation réseau en langage Go et implémentez des salles de discussion sur serveur WebSocket

Introduction
Avec le développement rapide d'Internet, les applications Web sont devenues un élément indispensable de la vie des gens. La communication en temps réel est l'un des composants importants des applications Web. WebSocket est un protocole qui assure une communication bidirectionnelle et peut établir une connexion persistante entre le navigateur et le serveur. Cet article expliquera comment utiliser les fonctions de programmation réseau dans le langage Go et les combiner avec le protocole WebSocket pour implémenter un simple serveur de salle de discussion.

Préparation
Avant de commencer à écrire du code, vous devez installer l'environnement de développement du langage Go et comprendre la syntaxe de base de Go. De plus, nous devons également utiliser une bibliothèque WebSocket open source pour simplifier le traitement du protocole WebSocket. La bibliothèque peut être installée avec la commande suivante :

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

Implémentation du code
Tout d'abord, nous devons importer les packages nécessaires :

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)
Copier après la connexion

Ensuite, définissez le programme de mise à niveau pour la connexion WebSocket. L'outil de mise à niveau est un http.HandlerFunc, qui met à niveau la connexion HTTP vers une connexion WebSocket :

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

Ensuite, définissez une structure pour représenter le serveur de la salle de discussion :

type ChatRoom struct {
    clients   map[*websocket.Conn]bool
    broadcast chan []byte
}

func newChatRoom() *ChatRoom {
    return &ChatRoom{
        clients:   make(map[*websocket.Conn]bool),
        broadcast: make(chan []byte),
    }
}
Copier après la connexion

Ensuite, implémentez la méthode du serveur de la salle de discussion. La première est la fonction handleWebSocket, qui permet de gérer la mise à niveau des connexions WebSocket et le traitement des messages :

func (c *ChatRoom) handleWebSocket(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }

    c.clients[conn] = true

    for {
        _, msg, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            delete(c.clients, conn)
            break
        }

        c.broadcast <- msg
    }

    defer conn.Close()
}
Copier après la connexion

Ensuite, implémentez la fonction BroadcastMessage, qui permet de diffuser des messages à tous les clients connectés :

func (c *ChatRoom) broadcastMessage() {
    for {
        msg := <-c.broadcast

        for client := range c.clients {
            err := client.WriteMessage(websocket.TextMessage, msg)
            if err != nil {
                log.Println(err)
                client.Close()
                delete(c.clients, client)
            }
        }
    }
}
Copier après la connexion

Enfin, implémentez la fonction principale fonction de démarrage du serveur de salle de discussion :

func main() {
    room := newChatRoom()

    go room.broadcastMessage()

    http.HandleFunc("/ws", room.handleWebSocket)

    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal(err)
    }
}
Copier après la connexion

Exécutez
Exécutez la commande suivante dans le répertoire de code pour démarrer le serveur de salle de discussion :

go run main.go
Copier après la connexion

Visitez ensuite http://localhost:8080 dans le navigateur, ouvrez les outils de développement du navigateur et changer de console Accédez à l'onglet WebSocket et utilisez le code JavaScript suivant pour vous connecter au serveur :

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

socket.onopen = function(event) {
  console.log("Connected to the server");
};

socket.onmessage = function(event) {
  console.log("Received message: " + event.data);
};

socket.onclose = function(event) {
  console.log("Disconnected from the server");
};

socket.send("Hello, server!");
Copier après la connexion

Vous pouvez désormais avoir une communication bidirectionnelle en temps réel entre le navigateur et le serveur.

Résumé
En apprenant les fonctions de programmation réseau en langage Go et en les combinant avec le protocole WebSocket, nous avons implémenté un simple serveur de salle de discussion. WebSocket peut établir une connexion persistante entre le navigateur et le serveur pour établir une communication en temps réel. Avec l'aide des fonctions de programmation réseau de Golang, nous pouvons facilement gérer les connexions WebSocket et la transmission de messages. J'espère que cet article pourra vous aider à apprendre la programmation réseau et WebSocket en langage Go.

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!

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