2016-04-12 62 views
0

我在NodeJs中使用firebase从Nest Camera获取运动检测事件。如何断开FireBase插座?

我使用以下代码进行连接,因为我需要为每个嵌套用户使用多个套接字连接。

this.context = new Firebase.Context(); 
this.firebaseClient = new Firebase(config.nest.firebaseSocketUrl, this.context); 

我想在用户将其模式更改为待机或家庭时断开特定套接字。

根据firebase文档,您可以使用Firebase.goOffline(),这对我没有用。我如何断开特定的Firebase套接字?

+0

为什么'goOffline()'没用?我不完全明白你为什么要断开socket连接。 –

+0

@PierreC。我想断开它,因为当用户的系统处于家庭或待机模式时,我不需要它。我想在不需要套接字时减少服务器上的负载我想断开连接。我们的每个用户都连接到那里的Nest帐户,对于每个用户,我们的后端服务器都有单独的套接字。如果有10,000个用户连接了我们的系统的嵌套帐户,那么我们需要维护10,000个套接字连接,这不是一个好的解决方案。 –

+0

@PierreC。 goOffline()用于断开所有套接字,但是我需要断开特定的套接字,具体取决于已经将用户的模式从外部改变为家庭或待机状态。正如你在我的代码中看到的,我已经使用了新的Firebase.Context()作为第二个参数,用于为每个用户建立单独的连接。 –

回答

0

火力地堡工程师在这里,

我已经回答了关于如何鸟巢和火力地堡互动here,但我会提供关于如何可以得到一个单一的客户端上从多个Nest设备的数据多了几分颜色类似的问题。

在看起来像一个结构短,巢存储数据:

users 
    $userID 
    devices 
     $deviceID 
     // info about devices 

当你调用authWithCustomToken(),你取下来到合适的$userID,并可以订阅这些用户的设备变化。这意味着你不能真正地访问多个用户的设备上的数据,因为通过验证你“向下移动树”到那个用户数据。没有办法向上移动(通常您可以拨打parent(),但这在Nest Firebase域中不起作用)。

由于火力地堡实时数据库连接需要每conncetion一个身份验证令牌,你就必须auth()unauth()多次这样做(脱机和联机并没有真正做到这一点,因为我们将继续使用相同的连接),我高度建议你避免这样做,因为它不会很好地扩展。

相反,您应该使用streaming REST API,它允许您创建流式REST连接,每个连接都使用用户令牌进行身份验证。您还可以控制这些连接何时打开/关闭。这是一个更多的工作来管理,但如果你的目标是精确控制,这就是你正在寻找的控制级别。一些例子是here

我们正在与Nest合作,在这里创造更好的体验,但现在这是我们都推荐的。

+0

如果我不需要断开套接字连接,那么使用套接字代替REST API会更好吗? REST API解决方案比套接字更好吗? firebase允许一次连接多少个套接字连接?在什么时候可以创建多少Rest API连接?打开的连接数量是否有限制? –

+0

如果您不需要在单个进程(未经身份验证的用户或单个用户)上验证多个用户,那么使用我们的Node客户端就没有问题。如果您需要验证多个用户,则您需要为每个已通过身份验证的用户创建一个进程,或者使用只包含'?auth = '查询参数的REST。套接字连接和REST连接可能会在您身边而不是我们身上受到限制,因为我们在任何特定时间处理数百万个开放式套接字。 –