Google App Engine渠道API javascript位置

时间:2012-11-06 22:44:31

标签: google-app-engine

我对此有点困惑,并且想确保我对这是如何工作并不天真。客户端javascript是否也必须托管在Google App Engine上?假设我在我的开发服务器上创建了一个频道,然后我的计算机上有一个本地HTML文件(非托管),并带有所需的javascript,我用一个令牌连接到该频道 - 这会有效吗?或者这不是渠道如何运作?

修改:

我所拥有的是与app.yaml文件位于同一目录中的HTML文件(因此我网站的根目录)。我在devserver中。

首先,我创建一个频道并获取令牌:

token = channel.create_channel('1')                      
print token                                                    
>>> channel-4132644671-1352248413-1

然后我在HTML文件中复制该标记:

<html>
<head> 
<script type="text/javascript" src="http://localhost:8080/_ah/channel/jsapi"></script>
</head>
<body >
<script>

    var token = 'channel-4132644671-1352248413-1';
    var channel = new goog.appengine.Channel(token);
    var socket = channel.open();
    socket.onopen = function() { alert('open'); };
    socket.onmessage = function() { alert('message'); };
    socket.onerror = function() { alert('error'); };
    socket.onclose = function() { alert('close'); };        
</script>
</body>
</html>

我用Safari打开HTML文件。我得到一个警告说&#34;打开&#34;。但是,无论我在var token中输入什么令牌,我都会打开&#34;打开&#34;警报,所以我不确定获得警报是否意味着什么。

然后我做: channel.send_message('1', 'hi')

我的HTML文件中没有任何反应。没有警报。我做错了什么?

2 个答案:

答案 0 :(得分:1)

由于原始策略相同,脚本必须与应用程序打开频道的服务器托管在同一个域中。在目前的实现中,该服务器是talkgadget.google.com,支持脚本是https://talkgadget.google.com/talkgadget/channel.js。使用curl,您可以看到应用程序的/ _ah / channel / jsapi端点只是发出302重定向到该脚本。因此,除非您打算开发和运行自己的频道服务器,否则不能这样做。

此外,如果渠道的基础实施在未来发生变化,App Engine将更新为将/ _ah / channel / jsapi重定向到新脚本,以便现有应用程序继续工作,同时可能采用自定义方法打破。更不用说自己做的事了。

答案 1 :(得分:1)

在dev_appserver中,通道由javascript函数实现,该函数不断轮询服务器。

如果您的dev_appserver实际上没有运行(看起来您已经以某种方式分解为dev_appserver),则轮询功能不会成功,您将无法获得通道消息。

在制作时,看起来通道API使用某种长轮询。

另外,我必须仔细检查文档,但我相信send_message的第一个参数应该是令牌。