Я хочу слушать изменения в реальном времени в пожарном депо, и мне также разрешено использовать только Голанг. Поскольку 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()
, но это тоже не помогает.