Heim >Backend-Entwicklung >Golang >Warum scheint mein Webserver gerade oft aufgerufen zu werden?
Bei der Webprogrammierung antwortet ein Server auf eingehende Anfragen. Unser einfacher Webserver wird jedoch scheinbar zufällig in geraden Zahlen aufgerufen.
Beim Aktualisieren der Seite bemerken Sie möglicherweise Folgendes:
You've called me 1 times You've called me 3 times You've called me 5 times ....
Dies geschieht, weil der Browser im Hintergrund zusätzliche Anfragen stellt. Eine häufige Anfrage betrifft favicon.ico, ein Symbol, das normalerweise neben dem Titel einer Webseite angezeigt wird.
Unser Webserver verarbeitet die favicon.ico-Anfrage nicht Es muss ständig vom Browser angefordert werden. Diese Anfrage erhöht unseren Zähler, was zu geraden Anrufen führt.
Go verarbeitet Anfragen gleichzeitig mithilfe von Goroutinen. Dies kann zu einer Race-Bedingung in unserem Code führen, bei der die Variable „calls“ von mehreren Goroutinen gleichzeitig erhöht wird. Um dies zu verhindern, synchronisieren wir den Zugriff auf die Variable mithilfe atomarer Operationen.
Alternativ können wir verhindern, dass der Zähler bei jeder Anfrage erhöht wird, indem wir den Anfragepfad überprüfen und Anfragen ignorieren, die nicht für unseren Root-Endpunkt bestimmt sind.
Um eine genaue Anrufzählung zu gewährleisten, können wir entweder den Zugriff auf die Anrufvariable synchronisieren oder bestimmte Anfragen selektiv ignorieren, z favicon.ico:
// Use atomic operations func HelloWorld(w http.ResponseWriter, r *http.Request) { count := atomic.AddInt64(&calls, 1) fmt.Fprintf(w, "You've called me %d times", count) } // Ignore specific requests func HelloWorld(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" || r.URL.Path == "/favicon.ico" { return } count := atomic.AddInt64(&calls, 1) fmt.Fprintf(w, "You've called me %d times", count) }
Durch die Implementierung dieser Änderungen zählt unser Webserver Anrufe unabhängig von zusätzlichen Browseranfragen genau.
Das obige ist der detaillierte Inhalt vonWarum scheint mein Webserver gerade oft aufgerufen zu werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!