2

问题描述:频道消息没有返回到 ajax 脚本。最初,消息被传递到客户端,但是当我在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 中所见)。在应用程序日志中,我可以看到该通道已创建:

“Creating channel token channel-2382918168-broadcast with client id 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 -

** ....消息文本...到带有密钥的频道(广播):没有连接客户端***

渠道/消息如何在更深层次上发挥作用?如果没有客户端连接或被新连接的客户端检索,消息是否会丢失?如果出于某种原因我创建了一个同名的频道,它会破坏它内部的未传递消息吗?

4

1 回答 1

6

远离设置POLLING_TIMEOUT_MS高于 1.5 秒,dev_appserver 将假定您已断开连接。

它不能通过生产中的轮询来工作,因此您不必真正担心超时。

编辑:刚刚看到罗伯特的评论;如果我在 Chrome/Safari/Firefox 中将轮询设置为 3 秒,我什至会遇到问题。我现在在我的应用程序上只有?disable_channel=true查询字符串,这样我就可以运行它们而不会因为 CPU 使用率而让我的笔记本电脑着火。

于 2011-08-03T17:27:25.007 回答