Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Realtime Database Listener Crashes on Internet Disconnection

未关闭
#791 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
25/100
Issue 类型
缺陷
描述清晰度
需要澄清
活跃度
停滞
技术栈
firebase, python
领域
backend, databases

调研方向

从报告中所示的 DatabaseListener.start_listener 方法和 Firebase Realtime Database 的 ref.listen 调用开始。在 listener 处于活动状态时断开互联网连接,以重现故障,并确定哪个 Exception 逃出了当前的处理逻辑。完成的标准是 listener 不会崩溃,并在连接恢复后继续运行,同时为报告的故障提供 coverage。

由索引模型根据 Issue 内容生成。

描述

api: database

Description
When the internet disconnects, the Firebase Realtime Database listener crashes, even with try and except statements. The application fails to recover and reconnect the listeners, resulting in the following error:

javascript
Code kopieren
google.api_core.exceptions.RetryError: Deadline of 120.0s exceeded while calling target function, last exception: HTTPSConnectionPool(host='storage.googleapis.com', port=443): Max retries exceeded with url: /storage/v1/b/villaduniatest.appspot.com/o?projection=noAcl&prefix=pdfstable%2F&prettyPrint=false (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x0000017C6BBE79D0>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))
Reconnecting...
Steps to Reproduce
Start a Firebase Realtime Database listener in a Python application.
Disconnect the internet.
Observe the application crash with the above error.
Expected Behavior
The application should handle the disconnection gracefully, retrying the connection until the internet is restored, without crashing.

Actual Behavior
The application crashes immediately upon internet disconnection, and does not recover.

Environment
Firebase Admin SDK: Python
Python Version: (your Python version)
Operating System: (your OS version)
Additional Context
Here is the relevant portion of the code:

python
Code kopieren
import firebase_admin
from firebase_admin import credentials, initialize_app, db
from requests.exceptions import ConnectionError, Timeout
import time

class DatabaseListener:
def init(self, app_instance):
self.app_instance = app_instance
self.listeners = {}

def start_listener(self, path, callback):
    ref = db.reference(path, app=self.app_instance)
    while True:
        try:
            listener = ref.listen(callback)
            self.listeners[path] = listener
            print(f"Listener started for path: {path}")
            break
        except (ConnectionError, Timeout) as e:
            print(f"Connection error starting listener for {path}: {e}")
            time.sleep(5)  # Retry after a delay

def stop_listener(self, path):
    if path in self.listeners:
        listener = self.listeners[path]
        listener.close()
        del self.listeners[path]
        print(f"Listener stopped for path: {path}")

def stop_all_listeners(self):
    for path in list(self.listeners.keys()):
        self.stop_listener(path)
    print("All listeners stopped.")

Any guidance or solutions to ensure the listener can recover from network disconnections would be greatly appreciated

主要语言
Python
星标
1.2k
派生
359
平均合并
3 天 9 小时
30 天内合并 PR
3

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

firebase/firebase-admin-python 的其他 Issue

查看 firebase/firebase-admin-python 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。