- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
似乎使 GAE Channel API 在财务上可行的唯一方法是实现某种池机制(一位高级应用程序引擎产品经理甚至在我向他们发送过高价格的电子邮件时告诉我这一点)以重用 channel 还没有过期。
我一直在集思广益地想出实现 channel 池的方法(地点),但我想到的每种方法都有一些非常严重的缺点。
Servlet 的静态内存 -- 很好,但当新的 VM 实例打开和/或客户端从一个 VM 传递到另一个 VM 时,会丢弃相当多的开放 channel 。
Memcache -- 至少内存可以从所有 VM 全局访问,但现在由于不活动和内存压力,丢弃非常可行的 channel 的可能性可能更大。
后端实例 -- 可能是可靠性方面的最佳选择,但现在运行后端的费用将首先耗尽实现池的所有节省!
是否有更好的地方/方式来实现我所缺少的跨 VM 的 channel 池,或者我是否不必要地挂断了我的选择的缺点?我真的希望有,否则看起来我的应用程序将不得不恢复到轮询(根据我的初步指标,这看起来稍微便宜一些)。
最佳答案
这就是我要做的(实际上我在看到你的问题后正在考虑编写这个库。我也需要它):
使用以下 API 创建一个 taskpool
模块。
client_id, token = taskpool.get()
# Setup a heartbeat in the client JS, maybe every minute.
# Also call this every time the client indicates presence
taskpool.ping(client_id)
taskpool.release(client_id)
实现:
client_id
和 token
存储在一个实体中,状态指示它是否正在使用、最后 ping 时间和创建时间。让 client_id
成为关键。也可以考虑使用 NDB .免费内存缓存。 get()
检查是否有未使用的标记,如果找到则返回一个。否则创建一个新的,存储并返回它。
ping()
更新该 token 的最后一次 ping 时间。不是轮询,而是让客户端每隔 [heartbeat] 时间发送一次 ping。
release()
将 token 标记为未使用。
每隔 [heartbeat] 秒运行一个任务/cron 以查找一段时间内未收到 ping 的 token - 并将它们设置为未使用。
当客户端报告一个关闭的 token 时,执行一个get()
。
不过请记住,安全性损失是任何一种 token 池的副产品。如果恶意客户端持有 token 并停止发送心跳,一旦 token 被重新利用,它可能稍后能够监听传递给新客户端的消息。如果您访问的是完全公开的站点,这不是问题,但无论如何请记住这一点。
如果我把它写成一个库,我会更新这个答案。
关于google-app-engine - Google App Engine 中 channel 池的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8147221/
Google Cloud Compute 中的 Google Compute Engine、App Engine 和 Container Engine 之间的实际区别是什么?什么时候使用什么? 有什么
我有一个在 Google App Engine 中运行的应用程序,它访问在 Google Compute Engine 中的机器上运行的服务。 Google App Engine 应用程序是该服务唯一
我们正在谷歌云中构建一个应用程序。我们使用 App Engine 作为前端,使用 Compute Engine 作为后端。在这些 Compute Engine 实例上,我正在运行一个接受特定“命令”消
我有一个现有的 GAE 应用程序(我们称之为应用程序 A)正在运行的情况,但由于非技术原因无法修改。当用户迁移到新的客户端版本时,我们需要将他们的数据从应用程序 A 迁移到新的 GAE 应用程序(我称
我正在尝试发现 App Engine 上的其他已部署服务。类似于 this文章建议。 我的代码是这样的: import ( "fmt" "net/http" "google.g
我想在我的网站上为“图像处理”事件设置服务器。如果我在 GCE 中使用“n1-standard-1”实例,GAE 中的可比功率是多少?是因为我算错了,还是同一个功率两者价格相差很大? 最佳答案 按小时
我在 Googl Compute Engine 和 Google App Engine 标准环境中的应用程序中创建了一个 VM 实例。我打算在 App Engine 中使用我的应用程序,在 Compu
我像往常一样使用 appcfg.py 更新我的应用程序,但收到一条错误消息。我试过 appcfg.py 回滚,两次尝试之间等了十分钟,但我仍然收到相同的错误消息。我该怎么办? 无法对 apps/dev
我想在 Google Compute Engine 上放置一个 Redis 服务器,并通过 AppEngine 的套接字支持与其对话。唯一的问题是似乎没有特定的防火墙规则说“此 AppEngine 应
我想知道 App Engine 和 Compute Engine 之间有什么区别。任何人都可以向我解释其中的区别吗? 最佳答案 App Engine 是一种平台即服务。这意味着您只需部署代码,平台会为
我正在编写一个在 App Engine 的 Go 运行时上运行的 Go 应用程序。 我注意到几乎所有使用 App Engine 服务(例如 Datastore、Mail 甚至 Capabilities
是否有人有在 Grid Engine/Sun Grid Engine/Son of Grid Engine 上运行 Docker 的经验,并且能够 monitor the resource used
我读了很多论坛,因为 grails app-engine 插件多年来没有更新,所以不可能将 grails 应用程序部署到谷歌应用程序引擎。当我准备放弃时,我发现使用 intellij 部署项目是可能的
当前设置, 运行 Windows Server 2012 (GCE Server 2012) 的谷歌计算引擎 运行 Debian Wheezy(GCE 服务器 Wheezy)的 Google 计算引擎
特定于基于 Docker 的部署,这两者之间有什么区别?由于 Google App Engine Flexible 现在也支持基于 Dockerfile 的部署,并且它也是完全托管的服务,因此它似乎比
我相信 Google Kubernetes Engine (GKE) 在 Google Compute Engine (GCE) 上运行。那么,在服务器管理方面使用 Google Kubernetes
TLDR;关于这个问题有任何更新吗? Google App Engine communicate with Compute Engine over internal network -- 是否可以在同
我正在尝试使用 Go SDK 为 App Engine 编写应用程序,但它似乎与单元测试有一种有趣的关系。人有written libraries左右this original, outdated一组工
在 App Engine 中,我想对在同一个 Google 云项目中创建的 Compute Engine 实例上运行的网络服务器进行 http fetch 调用,我想知道是否可以在不启用的情况下对实例
在编写 Go App Engine 标准应用程序时,过去的情况是您必须使用 App Engine SDK访问数据存储。然而,最近(从 Go 1.11 开始?),如果你只使用 Cloud Datasto
我是一名优秀的程序员,十分优秀!