python - 12 个请求后(约 60 秒)Firebase 或 Python-firebasin 库不发送和接收数据

标签 python firebase account

我有一个问题,请帮助我。

我创建了与 Firebase 协作来保存和接收数据的 Python 脚本。 我的脚本与 python-firebasin 库( link to python-firebasin )一起使用。 我使用我的 Firebase 帐户 - HACKER PLAN 测试了我的应用程序一周。一直以来一切工作正常。 之后,我购买了具有特殊 URL(例如 x.firebaseio.com)的高级帐户,这里开始了我的问题。 我将 json 结构从旧的 Firebase 导入到新的 Firebase 帐户,并在 Python 脚本中将新的 Firebase URL 设置为新的 Firebase 帐户。 所以现在我的新 Firebase 高级帐户一切都必须正常工作。 我运行我的脚本,大约 60 秒我的脚本工作正常。回调事件有效,设置值有效。 但大约 60 秒后,Firebase 没有收到也没有向我的 Python 脚本发送任何回调。 为了调试,我编写了一个简单的脚本,每 5 秒发送一次 unixtime 到 firebase。因此,前 12 个请求(12 * 5 = ~60 秒)一切正常,之后 firebase 不会收到任何数据。 Python 也不发送任何错误和回调。 注意:我的旧 Firebase 帐户一切正常 - 黑客计划!

from firebasin import Firebase
from time import sleep, time

# Firebase
vGFirebase = None

vGCompanyId = '1'
vGHardwareId = '0000000000123123'

i = 1

vGFirebase = Firebase('https://subdomain.firebaseio.com')

def errorCallback(data):
    print('errorCallback', data)

while True:
    try:
        pingChild = vGFirebase.child('data/app/pings/' + str(vGCompanyId) + '/' +  str(vGHardwareId))
        sendTime = int(time())
        pingChild.set(sendTime, errorCallback)
        print(i, 'send ', sendTime)
        i += 1
        sleep(5)
    except:
        print('Exception')
        break

vGFirebase.waitForInterrupt()

我在 python-firebasin 库中启用了 Debug模式。 所以在 12 个请求之后我收到了这条消息: (('已关闭:(', 1006, '即将离开'),) 所以我认为这是因为 Firebase 关闭连接...但是为什么?

抱歉我的英语不好......

最佳答案

firebasin 不会启动心跳来保持连接处于事件状态。您可以轻松地自己开始一个。在创建 vGFirebase 行之后:

from ws4py.websocket import Heartbeat
while not vGFirebase.connection.data:
    sleep(1)
Heartbeat(vGFirebase.connection.data,2).start()

不幸的是,dataref.py 中的 _keep_alive 方法似乎与黑客计划不符,并导致它们在触发自己的 keepalive 消息时断开连接,因此您还需要禁用它。您可以通过添加来即时执行此操作

import firebasin
firebasin.dataref.RootDataRef._keep_alive = lambda *x: None

到脚本的顶部。一种更永久但不可移植的解决方案是修补 dataref.py,将其 _keep_alive 方法替换为启动 ws4py 的 Heartbeat 的方法。我已经提交了一个拉取请求来在上游执行此操作;我们会看看 Abe Haskins 最初没有这样做是否有原因。

关于python - 12 个请求后(约 60 秒)Firebase 或 Python-firebasin 库不发送和接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24797180/

相关文章:

php - sql - 是否可以将外键添加到引用同一个表上的 id 列的表中

php - 在 Woocommerce 结帐注册中用计费名字替换用户名

python - Flask - Flask-Admin - 一对多 - 级联

Python + 请求 + split : What's the fastest/best way to make multiple concurrent 'get' requests?

javascript - 如果以其他语言保存,如何从服务器获取数据?

java - 按下按钮的 Android Firebase RecyclerView 出现无法解释的错误

javascript - 获取 Firebase 存储引用时出现问题

android - 没有帐户的同步适配器

python - 无论大小写如何在更长的字符串中查找字符串(并确定是哪种情况)

python - 从 Python 将 null 插入 Sqlite