0

我想将 GAE Channel API (Python 2.7) 与我的 GWT 应用程序(使用GWT-GAE-Channel)一起使用,但我无法弄清楚如何将在服务器端 Python 上创建的令牌放入我的 GWT 应用程序(“ index.html”在这个例子中),以便客户端 GWT 可以打开通道。我的服务器端代码目前如下所示:

import webapp2
import jinja2
import os
import uuid
from google.appengine.ext import db
from google.appengine.api import users
from google.appengine.api import channel

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

class MainPage(webapp2.RequestHandler):
    #The main page returns the GWT application
    def get(self):

        #Create a token when the GWT app is loaded to create a channel to return data
        client_id = uuid.uuid4().hex
        token = channel.create_channel(client_id, duration_minutes=None)     

        context = {} #There are currently no template variables in the GWT app
        template = jinja_environment.get_template('index.html')
        self.response.out.write(template.render(**context))

class A_handler(webapp2.RequestHandler):
    def post(self):
        client_id = self.request.get('id')
        channel.send_message(client_id, message)



app = webapp2.WSGIApplication([('/', MainPage),
                           ('/A', A_handler)],
                          debug=True)

我有与此问题相同的示例 GWT-GAE-Channel 客户端代码;但是,GWT ChannelFactory.createChannel 函数从服务器接收“令牌”的 GWT 代码是什么?python服务器可以将此令牌作为模板变量在GET请求中发送到GWT html,还是需要通过RPC或其他方法发送?

4

1 回答 1

0

由于这个线程本教程和学习 javascript,我能够弄清楚这一点。

我使用的方法是将上述python服务器端代码中的“token”作为模板变量发送到GWT html文件:

context = {'token': token} 
template = jinja_environment.get_template('index.html')
self.response.out.write(template.render(context))

并将以下内容添加到 GWT html 文件中:

<script type="text/javascript">
    var token = "{{ token }}";
    </script>

在 Eclipse (GWT) 中,我添加了以下 JSNI 函数来读取 javascript 变量:

private native String get_token() /*-{
return $wnd.token
}-*/;

然后我在 Java OnModuleLoad 中包含以下函数以读取 javascript 变量:

String token = get_token().toString();

如果您要从 javascript 发送多个变量,则可以使用链接教程中描述的字典。

于 2012-10-02T06:08:43.797 回答