Google App Engine 中的按請求Firestore 用戶端
問題圍繞在Google App Engine (GAE) 中管理Firestore 客戶端的適當方法展開)。該問題源自於 GAE 對客戶端庫使用 context 的要求。 Context 範圍僅限於 HTTP 請求。
問題
傳統上,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() }
但是,這種方法與GAE對context.Context從請求範圍繼承的要求相衝突。
解決方案
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中文網其他相關文章!