Google App Engine의 요청별 Firestore 클라이언트
질문은 Google App Engine(GAE) 내에서 Firestore 클라이언트를 관리하는 적절한 접근 방식을 중심으로 진행됩니다. ). 문제는 클라이언트 라이브러리가 HTTP 요청으로 범위가 지정된 context.Context를 사용하도록 요구하는 GAE의 요구 사항에서 비롯됩니다.
문제
전통적으로 Firestore 클라이언트는 다음 방식:
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() }
그러나 이 접근 방식은 context.Context가 요청 범위에서 상속되어야 한다는 GAE의 요구 사항과 충돌합니다.
해결책
GAE의 새로운 Go 1.11 런타임의 솔루션은 여러 호출에 firestore.Client 인스턴스를 재사용하는 것입니다. 이전 Go 런타임에서는 불가능했기 때문에 요청마다 새 클라이언트를 생성해야 했습니다.
구현
Go 1.11 런타임에서는 초기화할 수 있습니다. main() 또는 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 }
핸들러 함수 내에서 요청 컨텍스트를 활용하면 ctx 변수를 main()에서 핸들러로 전달할 필요성을 없애고 종속성 주입을 단순화하며 개선할 수 있습니다. 코드 명확성.
리소스
위 내용은 최적의 성능을 위해 Google App Engine에서 Firestore 클라이언트를 어떻게 관리해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!