Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penciptaan Pelanggan Firestore dalam Enjin Apl Google: Pelanggan Tunggal atau Setiap Permintaan?

Penciptaan Pelanggan Firestore dalam Enjin Apl Google: Pelanggan Tunggal atau Setiap Permintaan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-19 21:55:03594semak imbas

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

Penciptaan Pelanggan untuk Firestore dalam Enjin Apl Google: Tunggal atau Setiap Permintaan?

Corak untuk Penciptaan Pelanggan

Di Google App Engine, pengesyoran umum adalah untuk menggunakan semula firestore.Instance pelanggan untuk berbilang invokasi. Walau bagaimanapun, sama ada pelanggan tunggal atau pelanggan setiap permintaan adalah lebih sesuai bergantung pada versi App Engine khusus yang digunakan:

App Engine Standard dengan Go 1.11 Runtime:

Dengan masa jalan Go 1.11, sebarang konteks boleh digunakan untuk memulakan firestore.Client. Ini membenarkan penciptaan klien dalam fungsi main() atau mana-mana fungsi lain yang menggunakan konteks latar belakang. Panggilan API kemudiannya boleh dibuat dalam pengendali permintaan menggunakan konteks permintaan.

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
}

Standard Enjin Aplikasi dengan Masa Jalanan Go Sebelum 1.11:

Dalam masa jalan Go yang lebih lama , Enjin Apl menguatkuasakan penggunaan konteks berskop kepada permintaan HTTP untuk semua tika perpustakaan pelanggan. Akibatnya, firestore baharu. Pelanggan perlu dibuat setiap permintaan:

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,
    }
}

Dengan mengikut corak penciptaan klien yang sesuai berdasarkan versi Enjin Aplikasi, anda boleh mengoptimumkan prestasi dan penggunaan sumber aplikasi Firestore anda.

Atas ialah kandungan terperinci Penciptaan Pelanggan Firestore dalam Enjin Apl Google: Pelanggan Tunggal atau Setiap Permintaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn