- google.appengine.api.background_thread做開發服務器上工作
- 我不知道這是否是多人遊戲合理的做法
例如:
前端:
<script>
onMessage = function(msg){
console.log(msg.data)
}
channel = new goog.appengine.Channel('{{ token }}');
socket = channel.open();
socket.onmessage = onMessage;
</script>
testbackend.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)
main.py
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
直了蝙蝠,我會說有你的遊戲循環客戶端,是多人? – Awalias 2013-04-24 10:33:10
即使你正在編寫多人遊戲,遊戲循環仍應該在客戶端,它應該定期從服務器獲取世界更新,而不是相反。 – Linuxios 2013-04-24 13:04:16
是的,它是倍增。所以我在客戶端運行定時器並在服務器上驗證它?我的想法是使用「頻道」服務將更新推回瀏覽器。由於定時器是服務器端,我可以確定它沒有被篡改。它看起來比瀏覽器中的AI更有組織性,並與其他瀏覽器同步。誰的瀏覽器應該做計算?如果所有瀏覽器都在計算單個敵人,那會不會變得混亂? – dannySO 2013-04-24 14:24:55