>  기사  >  백엔드 개발  >  Google App Engine에서 Firestore 클라이언트 생성: 단일 클라이언트 또는 요청별?

Google App Engine에서 Firestore 클라이언트 생성: 단일 클라이언트 또는 요청별?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-19 21:55:03594검색

Firestore Client Creation in Google App Engine: Single Client or Per Request?

Google App Engine에서 Firestore용 클라이언트 생성: 단일 또는 요청별?

클라이언트 생성 패턴

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.