Maison > développement back-end > Golang > Pourquoi le nombre d'appels de mon serveur Web Go affiche-t-il uniquement les numéros impairs ?

Pourquoi le nombre d'appels de mon serveur Web Go affiche-t-il uniquement les numéros impairs ?

Linda Hamilton
Libérer: 2024-12-23 04:31:10
original
507 Les gens l'ont consulté

Why Does My Go Web Server's Call Count Show Only Odd Numbers?

Pourquoi le nombre d'appels d'un serveur Web ignore les nombres pairs

Problème

Lorsque vous utilisez ce serveur Web Go pour compter ses invocations, il imprime des nombres impairs à la place de la séquence attendue de 1, 2, 3... :

 package mainimport (
  "fmt"
  "net/http"
)

var calls int

// HelloWorld print the times being called.
func HelloWorld(w http.ResponseWriter, r *http.Request){
    calls++
    fmt.Fprintf(w, "You've called me %d times", calls)
}

func main() {
  fmt.Printf("Started server at http://localhost%v.\n", 5000)
  http.HandleFunc("/", HelloWorld)
  http.ListenAndServe(":5000", nil)
}
Copier après la connexion

Solution

Le comportement observé est dû à la gestion du fichier favicon.ico par le navigateur. Lorsqu'une page Web est chargée, le navigateur demande ce fichier, qui est une icône de site Web standard. Étant donné que le serveur Web fourni par le code donné ne sert pas de favicon.ico valide, le navigateur le demande à plusieurs reprises.

Comme chaque requête compte comme une invocation du gestionnaire HelloWorld, le nombre d'appels augmente même lorsque l'utilisateur ne rafraîchit la page qu'une seule fois. Les requêtes favicon.ico sont prises en sandwich entre les invocations de l'URL racine ("/") gérées par la fonction HelloWorld, ce qui entraîne une séquence de numéros impairs.

Pour éviter cela, vous pouvez vérifier le chemin de la requête dans HelloWorld. fonction et ignorer les requêtes pour favicon.ico :

func HelloWorld(w http.ResponseWriter, r *http.Request) {
    if r.URL.Path != "/" {
        return
    }
    count := atomic.AddInt64(&calls, 1)
    fmt.Fprintf(w, "You've called me %d times", count)
}
Copier après la connexion

Cette modification garantit que le nombre d'appels s'incrémente uniquement pour les requêtes adressées à l'URL racine. Alternativement, on pourrait désactiver complètement les requêtes favicon.ico dans la configuration du serveur 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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal