클라이언트 생성 패턴
Google에서 App Engine의 일반적인 권장사항은 여러 호출에 firestore.Client 인스턴스를 재사용하는 것입니다. 그러나 단일 클라이언트 또는 요청별 클라이언트가 더 적합한지는 사용된 특정 App Engine 버전에 따라 다릅니다.
Go 1.11 런타임이 포함된 App Engine 표준:
Go 1.11 런타임을 사용하면 모든 컨텍스트를 활용하여 firestore.Client를 초기화할 수 있습니다. 이를 통해 main() 함수 또는 백그라운드 컨텍스트를 사용하는 다른 함수에서 클라이언트 생성이 가능합니다. 그런 다음 요청 컨텍스트를 사용하여 요청 핸들러 내에서 API 호출을 수행할 수 있습니다.
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 }
Go 런타임이 1.11 이전인 App Engine 표준:
이전 Go 런타임 , App Engine은 모든 클라이언트 라이브러리 인스턴스에 대해 HTTP 요청으로 범위가 지정된 컨텍스트를 사용하도록 강제했습니다. 결과적으로 요청마다 새로운 Firestore.Client를 생성해야 했습니다.
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, } }
App Engine 버전에 따라 적절한 클라이언트 생성 패턴을 따르면 Firestore 애플리케이션의 성능과 리소스 활용도를 최적화할 수 있습니다.
위 내용은 Google App Engine에서 Firestore 클라이언트 생성: 단일 클라이언트 또는 요청별?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!