1

首先,如果之前已经有类似的问题,我很抱歉,老实说,我找不到任何问题。

我目前正在使用 Firebase 开发聊天,并且感谢体面的文档,到目前为止我取得了良好的进展,所以这不是真正的问题。但是,在测试时,我偶然发现了一个可能是错误的小问题。

为了在我的聊天中管理状态,我将值推送到与我的用户唯一 ID 对应的位置。然后在断开连接时删除此推送的值。通过这样做,我可以可靠地确定用户的状态,而不必担心他与我的 Firebase 的并发连接数(即浏览器选项卡)。

这实际上适用于 Firefox、Chrome 和 Safari,但似乎 Opera 存在问题。使用 Opera 时,如果您关闭正在运行聊天的选项卡,则应在断开连接时删除的值为not。它最终会在大约 2 分钟后被删除,但考虑到在使用另一个浏览器时会立即发生同样的事情,它花费的时间太长了。

出于好奇,我尝试了使用 Opera 的存在示例,并且能够重现完全相同的行为。如果我在另一个选项卡中打开相应的 Firebase,然后运行示例,输入名称并最后关闭运行示例的选项卡,我可以看到在我关闭选项卡时相应的 Firebase 中的值没有被删除。

如果您能告诉我这只是我做错了什么还是实际上是一个错误,我将不胜感激。

问候泥泞

4

1 回答 1

3

Opera 的页面转换模型与所有其他浏览器不同。大多数浏览器在加载和离开页面时触发事件。Opera 实际上会在内存中保持旧页面处于热状态,以使后退按钮更快。当您在 Opera 中单击“返回”时,它实际上是在恢复旧页面。

因此,我们无法准确知道某人何时在 Opera 中留下了页面。结果,我们被迫简单地等待服务器超时来确定有人离开了。

因此,简短的回答是,onDisconnect 操作在 Opera 中确实有效,但它们可能需要几分钟才能生效。在所有其他浏览器中,如果连接完全终止,操作将立即发生,如果没有,则在几分钟后发生。

于 2013-04-26T17:33:11.033 回答