Maison  >  Article  >  développement back-end  >  Comment implémenter une passerelle simple et performante avec Golang

Comment implémenter une passerelle simple et performante avec Golang

PHPz
PHPzoriginal
2023-03-31 10:25:541362parcourir

Ces dernières années, Golang (Go) a attiré de plus en plus d'attention dans le domaine du développement web. Son efficacité, sa simplicité et sa facilité d'utilisation en ont fait l'un des langages préférés pour la programmation réseau. Cet article explorera comment utiliser Golang pour implémenter une passerelle simple et performante.

Tout d’abord, vous devez comprendre ce qu’est une passerelle. Une passerelle est un périphérique réseau qui sert d'interface entre le réseau local et Internet et peut acheminer, convertir et proxy les données du réseau. Les passerelles sont généralement utilisées pour mettre en œuvre des fonctions telles que le contrôle d'accès, le contrôle de flux et la conversion de protocole.

Bien entendu, dans le développement web, nous rencontrerons souvent des proxys inverses. Par exemple, nous pouvons utiliser un proxy inverse pour mettre en cache les ressources statiques, l'équilibrage de charge, le cryptage HTTPS, etc. L’un des principaux moyens de mettre en œuvre un proxy inverse consiste à utiliser Nginx. Cependant, la configuration de Nginx est quelque peu complexe et sa maintenance n’est pas pratique. Par conséquent, nous devons trouver un moyen plus simple de mettre en œuvre un proxy inverse.

C'est pourquoi la passerelle Golang apparaît. La passerelle Golang peut facilement implémenter un proxy inverse, ainsi qu'effectuer le routage, le contrôle de flux et la conversion de protocole des requêtes HTTP. Ensuite, utilisons Golang pour créer une passerelle de base.

Étape 1 : Installer Golang

Pour utiliser Golang pour le développement Web, vous devez d'abord l'installer. Vous pouvez télécharger le programme d'installation de votre système d'exploitation sur le site officiel (https://golang.org/dl/). Une fois l'installation terminée, vous pouvez vérifier si Golang a été installé correctement à l'aide de la ligne de commande :

$ go version

Si vous avez installé Golang correctement, le résultat devrait ressembler à ceci :

go version go1.15.5 linux/amd64

Étape 2 : Installez les dépendances nécessaires

Avant démarrer la construction Avant notre passerelle, nous devons installer certaines dépendances nécessaires. Vous trouverez ci-dessous les dépendances nécessaires :

  • Gorilla Mux : il s'agit d'un routeur de requêtes HTTP populaire utilisé pour acheminer les requêtes HTTP vers les gestionnaires correspondants ;
  • httputil : il s'agit d'une bibliothèque standard Golang utilisée pour effectuer des requêtes HTTP et des opérations réactives ; logrus : Il s'agit d'un framework de journalisation Golang populaire pour l'enregistrement et l'affichage des messages de journal.
  • Vous pouvez installer ces dépendances à l'aide de la commande suivante :
$ go get -u github.com/gorilla/mux
$ go get -u github.com/pkg/httputil
$ go get -u github.com/sirupsen/logrus

Ces dépendances nous aideront à gérer les requêtes HTTP de manière dynamique et à enregistrer les messages de journal pour la passerelle.

Étape 3 : Créer une passerelle Golang

Maintenant que nous avons installé les dépendances nécessaires, nous pouvons commencer à créer notre passerelle Golang. Nous utiliserons Gorilla Mux pour acheminer les requêtes HTTP et logrus pour la journalisation. Ce qui suit est une implémentation de passerelle Golang simple mais efficace :

package main

import (
    "fmt"
    "net/http"
    "net/http/httputil"
    "os"

    "github.com/gorilla/mux"
    "github.com/sirupsen/logrus"
)

var (
    logger *logrus.Logger
)

func main() {
    logger = logrus.New()
    router := mux.NewRouter()

    router.HandleFunc("/api/v1/time", handleTime)

    gateway := &http.Server{
        Addr:    fmt.Sprintf(":%s","8080"),
        Handler: router,
    }

    logger.Info("Starting gateway...")
    err := gateway.ListenAndServe()
    if err != nil {
        logger.Fatal(err)
        os.Exit(1)
    }
}

func handleTime(w http.ResponseWriter, r *http.Request) {
    targetURL := "https://jsonplaceholder.typicode.com/todos/1"

    reverseProxy := httputil.NewSingleHostReverseProxy(&url.URL{})
    reverseProxy.Director = func(req *http.Request) {
        req.URL.Scheme = "https"
        req.URL.Host = targetURL
        req.URL.Path = r.URL.Path
    }
    reverseProxy.ServeHTTP(w, r)
}

Cette passerelle écoutera sur le port 8080 et acheminera les requêtes de la passerelle vers le point de terminaison "/api/v1/time". Il transmettra ensuite la requête HTTP à l'aide de la méthode httputil.NewSingleHostReverseProxy() de la bibliothèque httputil et la transmettra au serveur proxy inverse.

En plus du routage et des proxys inverses, cette passerelle ajoute la possibilité d'enregistrer et de gérer les chemins, afin que vous puissiez utiliser la bibliothèque logrus pour suivre et enregistrer les informations sur la console.

Conclusion

Dans cet article, nous avons rapidement créé une passerelle simple utilisant Golang et certaines bibliothèques couramment utilisées telles que Gorilla Mux et Logrus. La passerelle est très flexible et efficace et peut gérer un grand nombre de demandes d'utilisateurs. Cette flexibilité de conception vous permet d'utiliser la passerelle pour implémenter des fonctionnalités avancées telles que l'équilibrage de charge, la compression des données, les modifications de protocole, etc.

Golang peut se démarquer pour le développement Web car il nécessite moins de ressources et le code est plus compact et concis. À mesure que Golang continue d'évoluer, nous pensons qu'il continuera à jouer un excellent rôle dans le monde du Web.

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