【发布时间】:2018-12-14 11:25:54
【问题描述】:
我想收听 Firestore 中的实时变化,我也只能使用 Go。由于 Firestore SDK for Go 没有任何选项来监听实时变化,我决定使用 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() 手动等待,但这也无济于事。
【问题讨论】:
-
您是否尝试删除
if err := stream.CloseSend();?我有类似的行为,只是没有关闭 RequestStream 以使其工作(在 C# 中)
标签: firebase go google-cloud-firestore real-time rpc