首頁 > 後端開發 > Golang > 主體

在 Google App Engine 中建立 Firestore 用戶端:單一客戶端還是每個請求?

Mary-Kate Olsen
發布: 2024-11-19 21:55:03
原創
593 人瀏覽過

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 Standard:

使用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
}
登入後複製

1.11 之前的Go 運行時的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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板