Как слушать firestore через rpc?

Я хочу слушать изменения в реальном времени в firestore, и мне также разрешено использовать Golang. Поскольку у firestore SDK для golang нет возможности слушать изменения в реальном времени, я решил использовать firestore v1beta1 sdk.

Я написал для этого следующий код

func TestRPCHandler(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
c, err := firestore.NewClient(context.Background())

databaseName := "projects/[project_name]/databases/(default)"
if err != nil {
    panic(err)
}

stream, err := client.Listen(context.Background())
if err != nil {
    panic(err)
}

request := &firestorepb.ListenRequest{
    Database:             databaseName,
    TargetChange:         &firestorepb.ListenRequest_AddTarget{
        AddTarget: &firestorepb.Target{
            TargetType:           &firestorepb.Target_Documents{
                Documents: &firestorepb.Target_DocumentsTarget{
                    Documents:    []string{"projects/[project_name]/databases/(default)/[collection_name]"} ,
                },
            },
        },
    },
}

if err := stream.Send(request); err != nil {
    panic(err)
}

if err := stream.CloseSend(); err != nil {
    panic(err)
}

for {
    resp, err := stream.Recv()
    if err == io.EOF {
        break
    }
    if err != nil {
        panic(err)
    }
}

   }

Когда я это делаю, код не обнаруживает никаких изменений, которые я вызываю вручную в базе данных. stream.Recv()просто возвращает EOF и немедленно выходит. Я даже пытался вручную ждать, добавляя, time.Sleep()но это тоже не помогает.

firebase,go,google-cloud-firestore,real-time,rpc,

2
Яндекс.Метрика