DialogFlow测试云功能并发性



我有一个谷歌助手操作,通过Firebase云功能实现。我知道云函数可能会在调用之间共享实例,并且您可以使用全局作用域来完成繁重的工作和准备工作。我的函数实例化了一个全局类,该类序列化了一些JSON,并处理返回的数据和函数中的其他任务。我在这个类中有一些变量是在调用函数时设置的,我一直很小心地确保这些变量都是使用当前会话唯一的conv.data会话数据对象设置的。希望的是,尽管类实例可能存在于不同的调用之间,也可能由不同的用户存在,但它仍然会被上下文化到本地范围,我不会看到任何变量被其他会话覆盖。

这就引出了一个问题,那就是,我该如何测试它?我尝试使用谷歌助手应用程序在我的移动设备上进行测试,同时在浏览器控制台中进行测试。我目睹了两个会话被合并在一起,这是一个可怕的混乱,但我不确定这是全局范围,还是我只是在用同一个用户帐户测试两个会话。

有人能告诉我是否可以使用同一个用户帐户运行两个相同的操作吗?看起来conv.data对象混合了我正在运行的两个不同的会话,这表明它对两个会话使用了相同的会话令牌。

另一个问题是,您认为使用全局类跨调用存储状态会对不同的用户造成问题吗?文档确实声明一次只能调用一次函数。所以不应该有任何比赛条件类型的场景。

Dialogflow应该conv.data中的数据隔离到单个会话,甚至是来自同一用户的会话。当您使用Dialogflow时,这些数据存储在特定于会话的Context中。

您可以通过打开StackDriver登录来验证这一点,这将允许您检查Dialogflow在履行过程中使用的确切请求和响应,其中将包括用于跟踪的会话ID。(如果你认为这两者混合在一起,发布请求和响应的详细信息将有助于了解发生了什么。(

粗略地说,听起来你的全局中混合了一些东西,或者可能是在一个会话中设置的东西没有被另一个会话清除或覆盖。同样,看到确切的请求和响应应该可以帮助您(和/或我们(弄清楚这一点。

我的态度是,像这样的全局应该被视为只读。如果你想有一个包含本次会议相关信息的环境对象,我会把它与哲学设计分开。

当然,我不会使用这个全局状态来存储会话之间的信息。虽然函数只会被调用,但我不确定Promises会如何工作——一旦启动任何异步操作,就需要Promises。它还存在后续调用可能在不同实例上的风险。

简而言之,我的方法(我在多声道中非常坚定(:

  • 将所有状态存储在上下文中(conv.data应该这样做(
  • 通过requestconv或您创建的其他特定于请求的对象访问此
  • 全局信息/配置应为只读

相关内容

  • 没有找到相关文章

最新更新