Google App Engine のリクエストごとの Firestore クライアント
質問は、Google App Engine (GAE) 内で Firestore クライアントを管理するための適切なアプローチを中心に展開しています。 )。この懸念は、クライアント ライブラリがコンテキストを使用するという GAE の要件に起因しています。コンテキストのスコープは 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 変数を渡す必要がなくなり、依存関係の注入が簡素化され、コードの明瞭さが向上します。
リソース
以上が最適なパフォーマンスを得るには、Google App Engine で Firestore クライアントをどのように管理すればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。