Muster für die Client-Erstellung
In Google Für App Engine besteht die allgemeine Empfehlung darin, die firestore.Client-Instanz für mehrere Aufrufe wiederzuverwenden. Ob jedoch ein einzelner Client oder ein Pro-Anfrage-Client besser geeignet ist, hängt von der spezifischen verwendeten App Engine-Version ab:
App Engine Standard mit Go 1.11 Runtime:
Mit der Go 1.11-Laufzeit kann jeder Kontext zum Initialisieren des firestore.Client verwendet werden. Dies ermöglicht die Clienterstellung in der Funktion main() oder jeder anderen Funktion, die den Hintergrundkontext verwendet. API-Aufrufe können dann innerhalb von Anforderungshandlern mithilfe des Anforderungskontexts durchgeführt werden.
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 }
App Engine Standard mit Go-Laufzeit vor 1.11:
In den älteren Go-Laufzeiten App Engine erzwang die Verwendung von Kontext, der auf eine HTTP-Anfrage beschränkt ist, für alle Clientbibliotheksinstanzen. Folglich musste auf Anfrage ein neuer Firestore-Client erstellt werden:
func main() { // Setup server s := &server{db: NewFirestoreClient()} // Setup Router http.HandleFunc("/people", s.peopleHandler()) // Starts the server to receive requests appengine.Main() } func (s *server) peopleHandler() http.HandlerFunc { // pass context in this closure from main? return func(w http.ResponseWriter, r *http.Request) { ctx := r.Context() // appengine.NewContext(r) but should it inherit from background somehow? s.person(ctx, 1) // ... } } func (s *server) person(ctx context.Context, id int) { // what context should this be? _, err := s.db.Client.Collection("people").Doc(uid).Set(ctx, p) // handle client results } func NewFirestoreClient() *Firestore { ctx := context.Background() client, err := firestore.NewClient(ctx, os.Getenv("GOOGLE_PROJECT_ID")) if err != nil { log.Fatal(err) } return &Firestore{ Client: client, } }
Indem Sie das entsprechende Client-Erstellungsmuster basierend auf der App Engine-Version befolgen, können Sie die Leistung und Ressourcennutzung Ihrer Firestore-Anwendungen optimieren.
Das obige ist der detaillierte Inhalt vonFirestore-Client-Erstellung in Google App Engine: Einzelclient oder pro Anfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!