问题描述:通道消息没有返回到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))
在客户端,我有一个带有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 -
** ....消息文本...带密钥的频道(广播):没有连接客户端***
频道/讯息如何在更深层次上发挥作用?如果没有客户端连接或新连接客户端重新启动邮件,邮件是否会丢失? 如果由于某种原因我创建了一个具有相同名称的频道,它会破坏它内部的未传递消息吗?
答案 0 :(得分:6)
远离将POLLING_TIMEOUT_MS
设置为高于1.5秒,dev_appserver将假设您已断开连接。
它不能通过生产中的轮询工作,所以你不必真的担心超时。
编辑:刚看到罗伯特的评论;如果我在Chrome / Safari / Firefox中将轮询设置为3秒,我个人甚至会遇到问题。我现在只在我的应用程序上有?disable_channel=true
个查询字符串,这样我就可以运行它们,而不会因CPU使用情况而使我的笔记本电脑着火。