我在SDK 1.6.5,Python 2.5
当我启动我的开发服务器并访问我的频道测试页面127.0.0.1时一切正常 - 令牌生成并传递到前端,套接字打开,客户端连接ping收到,我的应用程序向客户端发送消息,收到了。
如果我重新加载页面:
- 我的日志中没有断开连接ping(它应该?)
- 生成新令牌(OK)
- 前端js记录用新令牌打开的插座(OK)
- 没有客户连接ping收到
- ...我的服务器端代码现在不知道这个套接字是打开的,不知道如何向客户端发送消息
我误解了这里的正确流程吗?
如果我移动+重新加载页面它是相同的。我必须重新启动开发服务器才能让所有内容重新运行。
使用djangoappengine:
inbound_services:
- warmup
- channel_presence
handlers:
- url: /_ah/channel/.*
script: djangoappengine/main/main.py
答案 0 :(得分:1)
如果您使用相同的客户端ID,这或多或少是预期的。基本原因是:给定的客户端ID,应用程序ID和版本映射到特定的XMPP端点。如果客户端在短时间内(例如,几秒钟)离线,则XMPP前端不希望使用断开连接通知来拦截客户端。页面刷新基本上就像丢失和重新协商网络连接一样,因此这种情况被视为暂时断开的连接,并且不会发送断开/连接。
如果您确实需要在页面刷新时获得断开连接,则可以通过在每个页面请求上调用create_channel时使用不同的客户端ID来解决此问题。