【问题标题】:Guarding against missed messages in AppEngine Channel API在 AppEngine Channel API 中防止丢失消息
【发布时间】:2012-01-23 06:55:42
【问题描述】:
在 AppEngine Channel API 中,频道会在 2 小时后自动关闭。我们通过在 onError 事件中重新加入频道来处理这个问题。
如果在频道重新连接时发送消息,是否有可能错过消息?
我们的场景:我们有一个预约安排系统,通过 API 在其他地方预约预约。我们使用该频道在日程安排上显示新的约会。但我担心如果在频道关闭并重新连接期间预订某些约会可能会错过。 Channel API 是否可以防止这种情况发生?
【问题讨论】:
标签:
google-app-engine
channel-api
【解决方案1】:
一点背景知识:Channel API 中的“客户端 ID”用于创建临时 XMPP 端点。给定的客户端 ID 将始终映射到相同的瞬态端点。因此,当您使用令牌重新连接到使用相同客户端 ID 创建的通道时,您将重新连接到同一个端点。因此,您可能会看到客户端在重新创建通道之前收到消息的行为。但是没有任何保证,当消息被发送到没有侦听客户端的通道时,我们不会主动排队。
在您的情况下,您能否在返回新令牌的同一响应中返回一个最新的约会列表?
【解决方案2】:
您不是在“重新连接”频道,而是在创建一个全新的频道 - 所以是的,消息可能会丢失。但是,如果您尝试向已关闭的频道发送消息,您应该会遇到异常。