Google app engine 谷歌应用引擎频道Hello world

Google app engine 谷歌应用引擎频道Hello world,google-app-engine,Google App Engine,我正在尝试使用通道实现从服务器到客户端的异步数据传输。我通读了下面的链接,但无法理解代码,因为它是零碎的。 有人能给我指出一个更完整、更简单的代码让我理解吗?我自己终于明白了,不得不更好地理解这个理论,并找到了缺失的部分。下面是我的代码 main.py from google.appengine.api import channel import webapp2 import jinja2 import os import uuid clientID_List = [] class Main

我正在尝试使用通道实现从服务器到客户端的异步数据传输。我通读了下面的链接,但无法理解代码,因为它是零碎的。


有人能给我指出一个更完整、更简单的代码让我理解吗?

我自己终于明白了,不得不更好地理解这个理论,并找到了缺失的部分。下面是我的代码

main.py

from google.appengine.api import channel
import webapp2
import jinja2
import os
import uuid
clientID_List = []

class MainHandler(webapp2.RequestHandler):
    def get(self):
        clientID = str(uuid.uuid4())
        global clientID_List
        clientID_List.append(clientID)
        token = channel.create_channel(clientID)
        template_values = {'token': token}
        template = env.get_template('index.html')
        self.response.write(template.render(template_values))

    def post(self):
        for item in clientID_List:
            channel.send_message(str(item),"hello")
        # channel.send_message(clientID, "helloWorld!")
        # user = users.get_current_user()

env = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))
app = webapp2.WSGIApplication([('/', MainHandler)], debug=True)
index.html

<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <h1>Channel test page</h1>
        <div id="div1"></div>
        <input type="button" value="mybutton" onclick="sendPostMessage()" />
        <script type="text/javascript" src="/_ah/channel/jsapi"></script>
        <script>
            var token = "{{ token }}";
            sendPostMessage = function () {
                var xhr = new XMLHttpRequest();
                xhr.open('POST', '/');
                xhr.send();
            };
            onOpened = function() {
               // document.write('Channel opened to the server with the token '+token + '</br>');
                document.getElementById("div1").innerHTML= document.getElementById("div1").innerText + "Channel opened to the server with the token :" + token + "<br />";
            };
            onMessage = function(message) {
                document.getElementById("div1").innerHTML= document.getElementById("div1").innerHTML + "Date recieved from Server :" + message.data+ "<br />";
            };
            channel =  new goog.appengine.Channel(token);
            socket = channel.open()
            socket.onopen = onOpened;
            socket.onmessage = onMessage;
            socket.onerror = function(e){
              document.writeln("error:"+e['description']+ '</br>');
            };
            socket.onclose = function(){
                document.writeln("close" + '</br>');
            };
        </script>
    </body>
</html>

通道测试页
var token=“{{token}}”;
sendPostMessage=函数(){
var xhr=new XMLHttpRequest();
xhr.open('POST','/');
xhr.send();
};
onOpened=函数(){
//document.write('使用令牌'+token+'向服务器打开的通道)
'; document.getElementById(“div1”).innerHTML=document.getElementById(“div1”).innerText+“频道以令牌“+token+”
打开到服务器; }; onMessage=函数(消息){ document.getElementById(“div1”).innerHTML=document.getElementById(“div1”).innerHTML+“从服务器接收的日期:”+message.data+“
”; }; 通道=新的goog.appengine.channel(令牌); socket=channel.open() socket.onopen=onOpened; socket.onmessage=onmessage; socket.onerror=函数(e){ document.writeln(“错误:+e['description']+'
”); }; socket.onclose=函数(){ document.writeln(“关闭“+”
”); };
最好使用python。