通过GAE的客户端到客户端通信 < >我认为使用GAE作为服务器来与Android客户端进行通信。 我的典型使用场景是: 用户打开网页(GAE)并从远程设备请求一些信息 设备获取消息,并通过网页将其发送回用户

通过GAE的客户端到客户端通信 < >我认为使用GAE作为服务器来与Android客户端进行通信。 我的典型使用场景是: 用户打开网页(GAE)并从远程设备请求一些信息 设备获取消息,并通过网页将其发送回用户,android,google-app-engine,jakarta-ee,Android,Google App Engine,Jakarta Ee,多亏了GCM,向手机发送信息是小菜一碟。 困难的部分是对用户的返回响应。 我唯一的想法是向数据存储插入响应,然后重复查询,但也有一些缺点:通信延迟,数据存储及其配额的过度使用 我听说并阅读过有关Channel API的内容,但当我使用GAE时,很有可能两个客户端都会连接到不同的机器。你知道如何正确地做这件事吗 让我的问题更清楚: 让我们简化这个问题。我有一个servlet从android客户端获取消息。消息发送给使用GWT和另一个servlet登录并拥有自己会话实例的用户。 您知道如何将消息从一

多亏了GCM,向手机发送信息是小菜一碟。 困难的部分是对用户的返回响应。 我唯一的想法是向数据存储插入响应,然后重复查询,但也有一些缺点:通信延迟,数据存储及其配额的过度使用

我听说并阅读过有关Channel API的内容,但当我使用GAE时,很有可能两个客户端都会连接到不同的机器。你知道如何正确地做这件事吗

让我的问题更清楚: 让我们简化这个问题。我有一个servlet从android客户端获取消息。消息发送给使用GWT和另一个servlet登录并拥有自己会话实例的用户。 您知道如何将消息从一个servlet传递到另一个servlet吗? 据我所知,不可能通过某种自动sendMessage()方法来完成。 我只需要实现某种邮箱。现在我看到memcache扮演这个角色。最适合的应该是一些类似亚马逊短信的服务,但让我的应用程序在多个服务器之间调度让我有点不高兴。
排队是另一种想法,但不是来自GAE的。我不希望解决方案在生产环境中被标记为实验性的。

通道API是您的答案。每个浏览器实例都应该打开一个通道,该通道由令牌标识。由您来跟踪所有令牌,可能是在某种会话数据中。然后,您可以将消息发送到相应的浏览器


到目前为止,我注意到有时信息无法发送。不经常,但有时。如果你的信息内容不是很重要,那也可以。在我的例子中,我构建了一个备份轮询HTTP查询。通道的好处是备份轮询对我来说不需要非常频繁。

通道API是您的答案。每个浏览器实例都应该打开一个通道,该通道由令牌标识。由您来跟踪所有令牌,可能是在某种会话数据中。然后,您可以将消息发送到相应的浏览器


到目前为止,我注意到有时信息无法发送。不经常,但有时。如果你的信息内容不是很重要,那也可以。在我的例子中,我构建了一个备份轮询HTTP查询。该频道的好处是,备份轮询对我来说不需要非常频繁。

try channel API既好又可靠,我们正在我们的一个应用程序中使用,到目前为止还并没有遇到任何问题。

try channel API既好又可靠,我们正在一个应用程序中使用,到目前为止还并没有遇到任何问题。

频道API中的单个消息限制为32K,所以可能不是最合适的。32K就足够了,但如何找到正确的频道?啊,我明白了。在不同的实例中使用不同的机器。嗯,如果您通过会话或其他方式知道他们的ID并不重要,因为这是您用来发送消息的,它不是特定于实例的。如果32k就足够了,那么memcache应该是您所需要的全部,您可以经常查询。试试看。单个消息在通道API中限制为32K,因此可能不是最合适的。32K就足够了,但是如何找到正确的通道呢?啊,我明白了。在不同的实例中使用不同的机器。嗯,如果您通过会话或其他方式知道他们的ID并不重要,因为这是您用来发送消息的,它不是特定于实例的。如果32k就足够了,那么memcache应该是您所需要的全部,您可以经常查询。试试看,Android上没有通道API,因为通道API库仅为javascript。有一些骇人的包装嵌入了WebView,但这在我看来太过分了。Android部分很容易使用GCM。困难的部分是如何在多实例环境中找到正确的会话。像应用程序bean这样的东西是可能的吗?memcache是在所有实例周围共享的-所有实例都以相同的方式查看memcache,所以无论哪个实例“询问”memcache,因为它们都共享同一个memcache池。我想piotrpo是在询问某种web“瘦客户端”。如果问题是关于如何存储GCM注册ID,那么您需要使用数据存储。Memcache值将随机消失。您真正应该做的是将其存储在数据存储中,但将其缓存在memcache中,如果在memcache中找不到,则返回到数据存储。幸运的是,如果您通过键获取实体,那么数据存储ndb API将为您实现这一点。有一些骇人的包装嵌入了WebView,但这在我看来太过分了。Android部分很容易使用GCM。困难的部分是如何在多实例环境中找到正确的会话。像应用程序bean这样的东西是可能的吗?memcache是在所有实例周围共享的-所有实例都以相同的方式查看memcache,所以无论哪个实例“询问”memcache,因为它们都共享同一个memcache池。我想piotrpo是在询问某种web“瘦客户端”。如果问题是关于如何存储GCM注册ID,那么您需要使用数据存储。Memcache值将随机消失。您真正应该做的是将其存储在数据存储中,但将其缓存在memcache中,如果在memcache中找不到,则返回到数据存储。幸运的是,如果您按键获取实体,数据存储ndb API将为您实现这一点。