0

我在尝试使用 GAE 和后端进行循环设置时遇到了困难。我的目标:一个主要的游戏循环来跟踪计时器(敌人在 3 秒内移动,冷却时间在 5 秒内准备好,等等)。我认为带有线程的驻留后端是要走的路。到目前为止,我只能在 appcfg.py 后端更新后让后端显示在仪表板中。现在我只是在努力弄清楚下一步。以下是一些具体问题:

  1. 如果开发服务器不支持后端线程,我该如何开发它?
  2. 使用后端和线程听起来像是游戏循环的合理方法吗?

最有用的是一个基本示例,其中包括 backends.yaml、主应用程序 .py 文件和后端 .py 代码。这就是我想象的一个例子的工作方式:

  • 请求从浏览器发送到应用程序。
  • 应用程序与后端实例通信并在线程中设置计时器
  • 一旦计时器完成......接下来会发生什么?响应浏览器,还是返回应用程序?

我已经阅读了很多次文档,并且不再沉迷其中。我试图弄清楚,但进展非常缓慢。而且我在网上找不到有用的、面向新手的示例。任何帮助将非常感激!谢谢,

4

1 回答 1

0
  1. google.appengine.api.background_thread 确实在开发服务器上工作
  2. 我不知道这是否是多人游戏的合理方法

例子:

前端:

<script>
onMessage = function(msg){
    console.log(msg.data)
}
channel = new goog.appengine.Channel('{{ token }}');
socket = channel.open();
socket.onmessage = onMessage;
</script>

测试后端.py

import logging, webapp2, time
from google.appengine.api import background_thread, channel

class Thread(webapp2.RequestHandler):
    def post(self):
        token = self.request.get("token")
        t = background_thread.BackgroundThread(target=timed_message, args=[token])
        t.start()

def timed_message(token, *kwargs):
    logging.info(token)
    time.sleep(2)
    channel.send_message(token, "channel works")

pages = [
        ("/testbackend/start_thread", Thread),
    ]

app = webapp2.WSGIApplication(pages, debug=True)

主文件

import webapp2, jinja2, os, logging
from google.appengine.api import backends, urlfetch, users, channel

JINJA_ENVIRONMENT = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))

class IndexPage(webapp2.RequestHandler):
    def get(self):
        user = users.get_current_user()
        if not user:
            self.redirect(users.create_login_url(self.request.uri))
        token = channel.create_channel(user.user_id())
        template_values = {"token":token}
        template = JINJA_ENVIRONMENT.get_template('templates/index.html')
        self.response.write(template.render(template_values))

class TestAReq(webapp2.RequestHandler):
    def post(self):
        user = users.get_current_user()
        url = backends.get_url("testbackend")+"/testbackend/start_thread"
        result = urlfetch.fetch(url, method="POST", payload="token="+user.user_id())
        self.response.write("abc")

pages = [
            ('/', IndexPage),
            ("/ajaxtest", TestAReq),
        ]
app = webapp2.WSGIApplication(pages, debug=True)

app.yaml 处理程序:

handlers:
- url: /static
  static_dir: static

- url: /testbackend/.*
  script: testbackend.app

- url: /.*
  script: main.app
于 2013-04-25T04:38:23.270 回答