Pro-Request-Firestore-Client in Google App Engine
Die Frage dreht sich um den geeigneten Ansatz zur Verwaltung von Firestore-Clients in Google App Engine (GAE). ). Die Sorge ergibt sich aus der Anforderung von GAE, dass Client-Bibliotheken einen Kontext verwenden müssen.Kontext, der auf eine HTTP-Anfrage beschränkt ist.
Das Problem
Traditionell wurden Firestore-Clients in erstellt auf folgende Weise:
type server struct { db *firestore.Client } func main() { s := &server{db: NewFirestoreClient()} // Setup Router http.HandleFunc("/people", s.peopleHandler()) // Starts the server to receive requests appengine.Main() }
Dieser Ansatz steht jedoch im Widerspruch zu der GAE-Anforderung, context.Context von der Anfrage zu erben Geltungsbereich.
Die Lösung
Die Lösung in der neuen Go 1.11-Laufzeit von GAE besteht darin, die firestore.Client-Instanz für mehrere Aufrufe wiederzuverwenden. Dies war in der alten Go-Laufzeit nicht möglich, daher musste auf Anfrage ein neuer Client erstellt werden.
Implementierung
In der Go 1.11-Laufzeit können Sie initialisieren den Client in main() oder init().
package main var client *firestore.Client func init() { var err error client, err = firestore.NewClient(context.Background()) // handle errors as needed } func handleRequest(w http.ResponseWriter, r *http.Request) { doc := client.Collection("cities").Doc("Mountain View") doc.Set(r.Context(), someData) // rest of the handler logic }
Durch die Verwendung des Anforderungskontexts innerhalb von Handlerfunktionen können Sie die Notwendigkeit einer Übergabe überflüssig machen die ctx-Variable von main zu Handlern, vereinfacht die Abhängigkeitsinjektion und verbessert die Klarheit des Codes.
Ressourcen
Das obige ist der detaillierte Inhalt vonWie sollte ich Firestore-Clients in Google App Engine verwalten, um eine optimale Leistung zu erzielen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!