python - App Engine channel API 不返回任何消息

标签 python google-app-engine channel-api

问题描述: channel 消息没有返回到ajax脚本。 最初,消息被传递到客户端,但是当我在js中设置更大的超时时,问题出现了:

goog.appengine.Socket.POLLING_TIMEOUT_MS = 5000; //poll every 5 seconds

我添加了一个非常基本的 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 中所示)。在应用程序日志中,我可以看到 channel 已创建:

“使用客户端ID广播创建 channel token channel-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 -

** ....消息文本...到带有 key 的 channel (广播):没有客户端连接***

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

最佳答案

请勿将 POLLING_TIMEOUT_MS 设置为高于 1.5 秒,dev_appserver 会假设您已断开连接。

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

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

关于python - App Engine channel API 不返回任何消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6928518/

相关文章:

linux - 如何从 CLI Cyber​​Duck 访问 Google Drive?

java - App Engine channel API 连接和断开

python - 如何在循环中读取用户输入(并且不阻塞此循环中的工作)?

python - 检查函数是否有装饰器

java - 查询 Google App Engine JDO 中的两个实体

google-app-engine - channel api : persistent disconnections and connections

javascript - RTCDataChannel 与 Google Channel API

c++ - 如何使用 VS C++ 6.0 在 C++ 应用程序中嵌入 Python 2.4?

python - Pandas:将数组列转换为 numpy 矩阵

python - Google 应用引擎引用属性关系