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中文网其他相关文章!