Go语言支持实时的Firebase事件吗?

koaltpgm  于 2023-03-19  发布在  Go
关注(0)|答案(2)|浏览(145)

在Firebase文档中,我很难相信Google自己的语言Go不支持child_changed这样的实时事件
https://firebase.google.com/docs/database/admin/retrieve-data
这些节点示例:

ref.on("child_changed", function(snapshot) {
  var changedPost = snapshot.val();
  console.log("The updated post title is " + changedPost.title);
});

有没有人在Go语言中编写了一个函数来监听这类事件?

bkhjykvo

bkhjykvo1#

reading data with the admin SDK的Firebase文档包含以下内容:
Go Admin SDK目前只支持阻塞读取。它不能用于添加接收实时更新通知的事件侦听器。
所以看起来Go语言SDK支持监听更新。
如果您的Go应用程序确实需要这样的更新,可以考虑为数据库的REST流API编写自己的客户机,该API触发REST SSE事件。

3j86kqsm

3j86kqsm2#

一种方法是在db引用上使用GetIfChanged方法。但问题是,它会在任何字段更改时发送整个Map。因此,您需要自己确定更改的确切内容。此外,在连续循环中运行时,由于每个循环中都有网络调用,因此速度很慢。

currEtag := "null_etag"
    
    //Continuos listening
    for {
        var latestData any
        ok, latestEtag, err := app.firebaseIn.GetDbRef("instruments").GetIfChanged().GetIfChanged(context.Background(), currEtag, &latestData)
        if err != nil {
            panic(err)
        }
        if ok {
            // data has changed in db. use 'latestData' to do your stuff here...
            
            // updating the currEtag
            currEtag = latestEtag
        }
    }
  • Etag是资源特定版本的标识符。

真的希望有人能发布更好的解决方案。

相关问题