将setValue( )
数据保存到Firebase。如果连接非常慢,会发生什么。保存数据是否有超时限制?如果它超时,它会重试吗?如果它重试了多少次?
此外,读取方法onDataChange(DataSnapshot snapshot)
和更新方法是否超时?
有没有办法设置自己的超时限制?
答案 0 :(得分:9)
当客户端首次连接到Firebase时(因此当它执行第一个new Firebase(...)
时,它会建立与服务器的WebSocket连接。之后,所有数据都通过预先建立的连接传输。
当您调用setValue()
或其他写操作时,该命令将通过打开的套接字发送到服务器。当客户端添加侦听器(使用addValueEventListener()
或类似)时,服务器将通过打开的套接字将更新发送到您的客户端。由于没有建立连接,超时并没有真正发挥作用。
当客户端和服务器之间的连接以某种方式丢失时,客户端将尝试重新建立连接。它在这里使用指数退避,所以最初它经常尝试重新连接并逐渐减少。
虽然没有与服务器的连接,但客户端将继续提供已从内存(或磁盘,如果已启用磁盘持久性)缓存的所有数据。来自客户端的任何写入操作都将排队等待发送到服务器。即使客户端未连接到服务器,本地事件(例如触发您的onDataChange()
方法)也会立即触发。
这涵盖了许多方面。如果您想了解有关其工作原理的更多信息,最好的办法是启用调试日志记录(Android客户端中的Firebase.getDefaultConfig().setLogLevel(Level.DEBUG)
)并检查丢弃网络连接时日志记录输出中显示的内容。它具有很高的教育意义,并且会回答比以往更多的问题。