- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
为简单起见,假设我的应用需要允许数千名用户查看聊天室的实时只读流。主持人可以键入消息,但其他用户不能——他们只能实时看到主持人键入的内容。想象一下,用户正在观看一场体育赛事的文字解说。
每个用户通过对 GAE 服务器的简单 /get-recent-messages
调用每秒轮询一次来检查新消息。 (在你问之前,我相信使用 Google 的 Channels API 太贵了。)
考虑到这个应用程序被成千上万的用户同时使用,这意味着数十到数百个 GAE 实例正在运行,我如何才能让这些 /get-recent-messages
调用返回最新的聊天室消息延迟小于 1000 毫秒,同时最大限度地减少服务器负载和 GAE 成本?
我的一些想法:
想法?
最佳答案
你应该检查this video .我会选择内存缓存/数据存储版本和少量缓存(1-2 秒),这样您就可以减少为流量提供服务所需的实例数量。如果您仍然需要 100-500 个实例来为您的流量提供服务,我仍然会选择内存缓存/数据存储版本。如果内存缓存是您的瓶颈,请将其分成 10 个键。
另一种解决方案是使用 Compute Engine 和网络服务器,您可以通过套接字连接用户。您可以通过 HTTP 与您的计算实例通信并将值存储在内存中,也可以使用拉取队列。
如果您真的需要与所有实例通信,请查看 communicating between modules
发布/订阅可能是您在发布新消息的实例和读取新消息的实例之间进行通信的一个不错的选择。根据我在 docs 中阅读的内容,您也应该能够将您的用户直接订阅到 Pub/Sub(仅拉取)。
关于java - 如何向所有 Google App Engine 实例广播数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33072075/
我是一名优秀的程序员,十分优秀!