我正在编写一个使用Channel API的Python GAE应用程序,除了我在使用开发服务器时在Firefox错误控制台中获得非致命的浏览器错误,一切正常.它与每个Channel API应用程序基本相同,因此我将展示我在示例Channel Tac Toe应用程序中看到的内容.
它以语法错误开始,其中显示的源代码始终只是数字"1":
Error: syntax error
Source File: http://localhost:8080/_ah/channel/dev?command=connect&channel=channel-2053758219-1329727351-185804764220139124118185804764220139124118
Line: 1, Column: 1
Source Code:1
Run Code Online (Sandbox Code Playgroud)
接下来是"格式不正确"的错误(仅限于Channel Tac Toe):
Error: not well-formed
Source File: http://localhost:8080/_ah/channel/dev?command=poll&channel=channel-2053758219-1329727351-185804764220139124118185804764220139124118&client=1
Line: 1, Column: 1
Source Code:{"winner": null, "userX": "185804764220139124118", "moveX": true, "winningBoard": null, "board": " ", "userO": ""}
Run Code Online (Sandbox Code Playgroud)
然后我得到一个无穷无尽的"无元素发现"错误,大约三秒钟:
Error: no element found
Source File: http://localhost:8080/_ah/channel/dev?command=poll&channel=channel-2053758219-1329727351-185804764220139124118185804764220139124118&client=1
Line: 1
Run Code Online (Sandbox Code Playgroud)
在此之后,Channel Tac Toe表现得很糟糕(双方都希望成为X玩家)虽然我的实际应用程序运行没有问题.
请注意,因为这些都是JavaScript错误,所以没有堆栈跟踪.
(a)造成这些问题的原因是什么?虽然我的应用运行,但这些错误降低了我的信心.
(b)无限系列的"无元素发现"消息是一个真正的问题,因为它们使得很难看到其他JavaScript错误.
我的配置:Windows 7,Firefox 10.0.2(禁用附加组件),GAE 1.6.2
我之所以选择google-app-engine是因为它的可扩展性,现在我试着了解一旦我发布产品,我将需要付多少钱.
我在谷歌应用程序引擎文档中来回查找问题的答案,找不到.我在"配额"页面中找到了一些细节,我发现我可以免费获得多少,以及账单默认配额多少.
在计费页面中,有资源和单位的CPU等数量以及它的成本.但是我无论在哪里都能找到每通道呼叫/创建的费用等等.
我甚至无法尝试使用管理控制台中的内容进行计算,因为当前的数字现在为0(因为有2个用户是程序员).
我怎样才能发布产品(希望)每天都会创建大量的频道?
有错过的页面,还是有计算工具?
谢谢!
编辑:Moishe,感谢快速和可读的答案.所以这里还有一些问题:1.你认为 - 如果需要的话 - 我将能够获得更多的频道配额吗?我看到有一个特殊的表格要求更多配额,但我不确定它是否包含Channel-API功能...... 2.您是否有任何关于"如何有效使用channel-API"的帖子?我看到了一些关于每个用户重用令牌的东西.还有更多吗?
再次感谢.
我正在使用GAE及其Channel API之上的聊天应用程序.我已经研究过doc和提供的例子,也看了一下这里的一些答案,我仍然不觉得我对clientId/token mechanics有了全面的了解.
1).令牌发出2个小时,所以当它到期时我必须申请一个新令牌.我还将通过客户端id param在我的处理程序上获得断开连接.那么它是否意味着该频道在那时关闭并且通过请求新令牌我基本上创建了一个新频道?因此,在那个时候我可以使用哪个客户端ID,旧的还是全新的?GAE还会将此视为正在创建的新频道吗?
2).如果用户在令牌过期之前离开我的页面(我将收到断开连接).然后回来(仍然在那个2小时的窗口内),我可以用旧令牌将他重新连接到同一个频道(假设我把它们放在cookie中)?如果是,那么GAE不会将其视为正在创建的新频道吗?
3).如果上述问题的答案是肯定的,那么我可以在服务器端垃圾收集断开连接的客户端ID和令牌,并将它们分发给新连接的客户端.在这种情况下,如果用户回到我的页面并且他的旧客户端ID /令牌已被其他人使用,他将只从池中接收另一对.或者这是每页规则一个通道生效的地方吗?
阿里克塞,谢谢你的欢呼和欢呼
如果客户端与 Google App Engine 频道断开连接,那么创建该频道的服务是否可以为另一个客户端重用相应的令牌?
我意识到之前有一些关于“汇集渠道”的最佳方式的问题,其中隐含着这是可能的想法。但是,我也看到一些意见表明这是不可能的。如果有人能澄清这一点,我将不胜感激。
我希望从我的站点到App Engine的后端与Channel进行跨域通信.这有可能吗?如果可以的话怎么样?因为Javascript API中没有域参数
所以我正在尝试使用带有Angular.js的GAE Channel API来进行实时数据绑定更新(这真的很酷,对吧!?).我被告知正确的方法是将Channel API Javascript客户端包装在Angular.js服务中(并确保使用$ apply()).但那究竟是什么意思呢?
根据我的理解,对于Channel API,我几乎应该有一个1:1的客户端:频道连接,所以我的所有更新都必须在我的整个应用程序中为所有模型向下流动一个频道.然后,我如何向可能的多个范围广播模型(通常是ngResource)已更新? $看?$发出?$广播?$消化?
问题描述:通道消息没有返回到ajax脚本.最初,消息被传递到clietn端,但是当我在js中设置更大的超时时出现问题:
goog.appengine.Socket.POLLING_TIMEOUT_MS = 5000; //每5秒轮询一次
我添加了一个非常基本的Python代码来测试Channel API是否适用于我的Google App Engine应用程序.
index:
token = channel.create_channel(CHANNEL_NAME)
channel.send_message(CHANNEL_NAME, message)
#token is passed to template
additional_view:
#is another view, trigger manually from browser after index
from django.utils import simplejson
channel.send_message(CHANNEL_NAME, simplejson.dumps(data))
Run Code Online (Sandbox Code Playgroud)
在客户端,我有一个带有onMessage代码的常规js.
问题是没有消息返回到客户端请求.他们都是空的轮询ajax(如Firebug中所见).在应用程序日志中,我可以看到创建了通道:
"使用客户端ID广播创建频道令牌频道-2382918168-broadcast" ,稍后发送消息,但带有注释:
来之间这些要求:
INFO 2011-08-03 14:33:32,000 dev_appserver.py:4248] "POST /_ah/channel/connected/ HTTP/1.1" 404 -
INFO 2011-08-03 14:33:33,780 dev_appserver.py:4248] "POST /_ah/channel/disconnected/ HTTP/1.1" 404 -
Run Code Online (Sandbox Code Playgroud)
**....消息文本...通过密钥(广播):没有客户连接***
通道/消息如何在更深层次上运行?如果没有客户端连接或新连接客户端重新启动邮件,邮件是否会丢失?如果由于某种原因我创建了一个具有相同名称的频道,它会破坏它内部的未传递消息吗?
Google应用引擎似乎最近将频道创建的免费配额从每天8640降至100.我希望有一些优化频道创建的建议,我不愿意使用付费套餐的爱好项目.
在文档中特别提到每个通道ID只能有一个客户端.如果有办法解决这个问题会有所帮助,即使它只适用于一台计算机上的多个客户端(例如多个标签)
在我看来,我可以通过重复向服务器发送XHR请求以检查新消息来模拟通道功能,从而绕过限制.但是,我担心这种方法可能太慢了.是否有任何现有的图书馆可以遵循这一原则?
如果有的话.I. e.如果有一些只是大致相似的东西,我将不胜感激,如果你可以描述什么是局限和差异.
google-app-engine comet amazon-ec2 amazon-web-services channel-api
嗨,我目前正在为我的项目使用频道API。我的客户是一个标牌播放器,仅当用户更改媒体内容时才从App Engine服务器接收数据。Appengine每天仅一次或两次将数据发送给客户端。您是否认为通道api对此过度杀戮?还有哪些其他选择?
channel-api ×10
javascript ×2
python ×2
amazon-ec2 ×1
angularjs ×1
billing ×1
clientid ×1
comet ×1
cross-domain ×1
overriding ×1
quotas ×1
reconnect ×1
token ×1