我的申请希望有:
-
自动扩展
- 我希望 App Engine 在流量增加时启动应用程序的新实例
- 当实例空闲时,我希望 App Engine 将其关闭
-
客户端/服务器关联性
- 在初始客户端->服务器 HTTP 请求之后,我想要客户端
能够连接到同一个应用程序服务器,以便该应用程序服务器
可以维护一堆客户端状态
- 状态可能会频繁更新(以支持实时交互),
所以基于memcache+datastore的持久化是不可取的。
- 服务器可能需要根据多个客户端的状态做出决策,
例如实时多人游戏
我怎样才能做到这一点?
您可以使用 App Engine 后端(长期运行、可配置、可寻址、持久的服务器)实现这些目标:
- https://developers.google.com/appengine/docs/python/backends/
- https://developers.google.com/appengine/docs/java/backends/
Python实现
-
将后端配置为两者public and dynamic
# backends.yaml
backends:
- name: foo
instances: 20
options: public, dynamic
-
除了以通常的方式部署您的应用程序之外:
appcfg.py update .
记得部署你的后端:
appcfg.py backends . update
-
对于初始连接,让您的客户端使用
非实例特定的后端主机名,例如:
foo.your_app_id.appspot.com
App Engine 会将您的请求路由到可用的后端
实例,可选地启动一个新的后端实例之后。
-
在服务器上的请求处理代码中,使用后端
用于确定哪个实例正在处理请求的 API
返回给客户端一个实例特定的 URL。
from google.appengine.api import backends
import webapp2
class GetPersistentUrlHandler(webapp2.RequestHandler):
def get(self):
"""Return the current backend's instance-specific URL."""
my_url = backends.get_url(instance=backends.get_instance())
self.response.write(my_url)
app = webapp2.WSGIApplication([
('/get_peristent_url', GetPersistentUrlHandler),
], debug=True)
-
客户端与特定实例建立后续连接
后端网址:
http://3.foo.your_app_id.appspot.com
注意:使用 https 时,请务必将子域点替换为-dot-
以避免 SSL 证书问题。
https://3-dot-foo.your_app_id.appspot.com
局限性
- 后端不会永远存在,可能会在没有通知的情况下意外关闭
- 您的应用程序可以拥有的后端数量目前有限
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)