【问题标题】:Channel presence urls not getting called when user reloads the page用户重新加载页面时未调用频道状态网址
【发布时间】:2012-05-21 12:16:05
【问题描述】:

我使用的是 SDK 1.6.5、Python 2.5

当我启动我的开发服务器并在 127.0.0.1 访问我的频道测试页面时,一切正常 - 生成令牌并传递到前端,套接字打开,收到客户端连接的 ping,我的应用程序向客户端发送消息,收到了。

如果我重新加载页面:
- 我的日志中没有显示断开连接 ping(应该吗?)
- 生成新令牌 (OK)
- 前端 js 记录使用新令牌打开的套接字 (OK)
- 没有收到客户端连接的 ping
- ...我的服务器端代码现在不知道此套接字已打开并且不知道如何向客户端发送消息

我是否误解了这里的正确流程?

如果我 shift+reload 页面是一样的。我必须重新启动开发服务器才能让一切恢复正常。

使用 djangoappengine:

inbound_services:
- warmup
- channel_presence

handlers:
- url: /_ah/channel/.*
  script: djangoappengine/main/main.py

【问题讨论】:

    标签: google-app-engine channel-api


    【解决方案1】:

    如果您使用相同的客户端 ID,这或多或少是意料之中的。基本原因是:给定的客户端 ID、应用 ID 和版本映射到特定的 XMPP 端点。如果客户端在短时间内(例如,几秒钟)离线,XMPP 前端不希望向客户端发送断开/连接通知。页面刷新基本上就像丢失和重新协商网络连接,所以这种情况被视为暂时断开的连接,不会发送断开/连接。

    如果您确实需要在页面刷新时断开连接,您可以通过在每个页面请求上调用 create_channel 时使用不同的客户端 ID 来解决此问题。

    【讨论】:

    • 感谢澄清(这可能会更好地记录下来!)所以,只要我没有收到给定客户端 ID 的断开连接 ping,我就可以将该客户端视为已连接并从后端发送消息.如果我发送了一条消息,但客户端此时无法接收它会发生什么……它是重试、以某种方式出错还是消息丢失了?
    • 消息可能会丢失。它们在前端缓存了一小段时间,并且可以交付,但不能保证。
    • 澄清一下,当您在上面谈论“XMPP 前端”和“在前端缓存”时,您是在谈论服务器端 Channel API 基础架构的一部分,而不是“前端”在网络浏览器中? ...在这种情况下,“客户端”总是指网络浏览器,是吗?
    • 正确:“客户端”= 浏览器,“前端/前端”= 属于 Channel API 基础架构的服务器。
    猜你喜欢
    • 2018-09-04
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 2018-11-12
    • 1970-01-01
    相关资源
    最近更新 更多