Maison  >  Article  >  développement back-end  >  Comment combiner plusieurs instances http.ServeMux sur le même port ?

Comment combiner plusieurs instances http.ServeMux sur le même port ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-02 10:18:02695parcourir

How to Combine Multiple http.ServeMux Instances on the Same Port?

Combinaison de plusieurs instances http.ServeMux

Pour servir plusieurs instances http.ServeMux sur la même adresse réseau et le même port, la fonction combinéeMux peut être implémenté comme suit :

<code class="go">func combineMux(muxes ...*http.ServeMux) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        var h http.Handler

        for _, mux := range muxes {
            if h = mux.Handler(r); h != nil {
                h.ServeHTTP(w, r)
                return
            }
        }

        http.NotFound(w, r)
    })
}</code>

Cette fonction crée un nouveau http.Handler qui parcourt les instances ServeMux fournies et sert le premier gestionnaire correspondant pour la requête donnée. Si aucun n'est trouvé, une réponse 404 Not Found est renvoyée.

Approche alternative : imbrication des instances ServeMux

Une autre façon d'obtenir le même résultat consiste à imbriquer le ServeMux instances les unes dans les autres. Ceci est possible car un http.ServeMux implémente l'interface http.Handler.

Par exemple, pour servir muxA et muxB sur le même port et hôte en utilisant cette approche :

<code class="go">rootMux := http.NewServeMux()
rootMux.Handle("/muxa/", muxA)
rootMux.Handle("/muxb/", muxB)
http.ListenAndServe(":8080", rootMux)</code>

Dans ce Dans ce cas, rootMux traitera toutes les requêtes adressées à son URL racine et déléguera les requêtes à /muxa/ et /muxb/ aux instances ServeMux correspondantes. Notez que chaque ServeMux imbriqué devra gérer son propre préfixe de sous-chemin (par exemple, /muxa/ pour muxA).

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