Maison  >  Article  >  développement back-end  >  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 ?

王林
王林original
2023-07-30 18:43:54826parcourir

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

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"
)

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
    },
}

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),
    }
}

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()
}

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)
            }
        }
    }
}

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)
    }
}

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

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!");

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!

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