【问题标题】:Does Firebase handle threading on Java Server SDK with App Engine?Firebase 是否使用 App Engine 处理 Java Server SDK 上的线程?
【发布时间】:2016-12-20 04:15:26
【问题描述】:

我有这样的设置:

客户端 实时数据库 AppEngine 服务器

AppEngine 服务器在 servlet init() 方法中有一些代码。

@Override
public void init(ServletConfig sc) throws ServletException {
  // Setup Firebase....
  firebase.addChildEventListener(..nested SingleValueEventListener..);
}

每当客户端更新 firebase 中的节点时,AppEngine 都会监听此更改,并进行一些处理并更新其他一些节点。

此设置适用于测试,因为我是单个用户。但是如果有 100 个人在使用这个应用程序呢?我是否保证这个 childEventListener 将为每个用户运行代码?那些嵌套的 SingleValueEventListener 也会触发吗?

或者我是否必须在每个不同的 firebase 请求上创建线程?还是这一切都由 Firebase Java Server SDK 处理?

另外,init() 方法是放置 ChildEventListener 的正确位置吗?我可以在其中添加... 10 个侦听器吗?

【问题讨论】:

    标签: multithreading google-app-engine servlets firebase firebase-realtime-database


    【解决方案1】:

    在应用引擎上,firebase 使用后台线程来监听 firebase 上的变化。通过添加 ChildEventListener,您可以在后台创建一个新的长寿命线程,它将为您处理所有事情,无需担心并创建一个新线程等。无论谁做了这些更改,它都会由 firebase 中的更改触发(任何用户你的可以做到)。但是要在应用程序引擎上使用长期存在的后台线程,需要启用手动缩放,这意味着只有一个后端实例会运行。它将处理尽可能多的请求,因此您的后端可以处理的每秒更改的数量是固定的。

    【讨论】:

      【解决方案2】:

      我有一个类似的应用程序正在进行中,我们已经使用它几个月了。我不建议您为此使用 appEngine 标准环境,因为它不准备保持持久连接(我们是这样开始的)

      因此,有时我们会失去与 firebase 的联系,在进行一些研究后,我们发现这是一个常见问题。解决它的唯一方法是将服务器迁移到柔性环境

      https://cloud.google.com/appengine/docs/flexible/java/migrating-an-existing-app

      这是一个测试版,我不确定未来的定价,但只要它适用于我们的应用程序。

      希望对您有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多