Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 处理给用户的通知_Python_Google App Engine_Notifications - Fatal编程技术网

Python 处理给用户的通知

Python 处理给用户的通知,python,google-app-engine,notifications,Python,Google App Engine,Notifications,我正在GAE上构建一个应用程序,当其他用户执行影响他们的操作时,需要通知用户。当你的朋友对你的facebook状态发表评论时,一个真实世界的类比就会被提醒 我了解Channel API如何实际实时发送通知,但我正在尝试了解将这些通知存储在数据存储中的最有效方法。理想情况下,我希望通知代码与正在执行的实际事件解耦。这是一个很好的用例吗?感觉不太对,因为我不需要执行任何类型的搜索,只是:如果看到新的注释,创建一个新的通知,该通知存储在数据存储中,并通过通道api推送到客户端(如果它们已连接)。我基本

我正在GAE上构建一个应用程序,当其他用户执行影响他们的操作时,需要通知用户。当你的朋友对你的facebook状态发表评论时,一个真实世界的类比就会被提醒


我了解Channel API如何实际实时发送通知,但我正在尝试了解将这些通知存储在数据存储中的最有效方法。理想情况下,我希望通知代码与正在执行的实际事件解耦。这是一个很好的用例吗?感觉不太对,因为我不需要执行任何类型的搜索,只是:如果看到新的注释,创建一个新的通知,该通知存储在数据存储中,并通过通道api推送到客户端(如果它们已连接)。我基本上需要一个数据库触发器,但我认为GAE不支持它。

看起来GAE确实支持使用模拟数据库触发器

钩子可以用于

  • 查询缓存
  • 审核每个用户的数据存储活动
  • 模拟数据库触发器

  • 为什么不首先将事件及其通知耦合在一起? 为了帮助您处理您的用例,我想了解一下可能会很有趣:)

    如果我必须这样做,我会在任何时候向数据存储写入可能引发事件的内容时启动任务队列。。。 这样,您就可以进行写操作,并有一个单独的“层”来处理事件。 触发器甚至不是很好的选项,因为应用程序必须“轮询”数据库才能将事件推送到用户的UI

    我认为您的流程(触发事件)不属于数据库,因为它可能需要数据存储无法提供的业务规则:例如,当用户忽略另一个时,您不应该触发事件。
    您在数据库系统中投入的业务逻辑越多,维护和扩展IMHO就越复杂。

    为什么您觉得前瞻性搜索不合适?其他事件必须符合哪些条件才能触发通知?您能否使用标准查询轻松查询所有需要通知的用户?如果是,则在任务中执行该查询。但比较这两种方法的效率是值得的。前瞻性搜索查询比标准查询更灵活,因此折衷方案是创建文档模式,而不是进行额外的工作,以使标准db查询前瞻性搜索在其他地方创建的流式数据看起来很有用。因此,如果用户执行了搜索,那么我们希望“保持搜索运行”,并在用户查看原始结果时向用户发送新的匹配项。我想做的更像是几乎每一笔交易的副作用。Prospecting提供了很多我不需要的灵活性。另外,如果我不需要迁移的话,我也不想被绑定到GAE特定的功能中。但是这些功能是在面向用户的事务中运行的,如果它们是复杂的查询,可能会降低用户体验。无论哪种方式,如果你必须做大量的通知,你会希望使用任务来实际做通知。好的一点,使用钩子会降低用户体验,我会调查任务队列。我发现数据库钩子并不是我真正想要的。他们不允许我知道在放置数据存储对象时发生了什么更改,因此我无法根据更改的内容发送特定类型的通知。我越是调查这个问题,就越认为可以将这些内容结合起来。我不认为真的有办法解决这个问题。任务队列似乎是一种方法,这样用户在执行操作时就不必等待触发通知。所以,它更像这样:用户执行操作,操作存储在数据库中,用户完成,操作需要通知另一个用户,但这只是发送到任务队列,以便在原始用户不等待的情况下执行通知。