内容简介:我在AppEngine上构建了社交网络/约会类型应用程序,目前正在添加基于Channel API构建的聊天.但是,我遇到的问题是用户可能会在聊天过程中重新加载或导航到新页面(就像在Facebook中一样).这意味着服务器不容易知道它是否应该为给定客户端生成新的通道ID令牌,或者是否已经为给定客户端分配了通道令牌.如果有一种方法可以检查(服务器端)特定客户端是否已打开某个频道,那将非常有用.例如,如果我为客户端“Jack”分配了一个“Jack-Jan-21-2010”的频道ID,那么我希望能够在服务器端检查是
我在AppEngine上构建了社交网络/约会类型应用程序,目前正在添加基于Channel API构建的聊天.但是,我遇到的问题是用户可能会在聊天过程中重新加载或导航到新页面(就像在Facebook中一样).这意味着服务器不容易知道它是否应该为给定客户端生成新的通道ID令牌,或者是否已经为给定客户端分配了通道令牌.
如果有一种方法可以检查(服务器端)特定客户端是否已打开某个频道,那将非常有用.例如,如果我为客户端“Jack”分配了一个“Jack-Jan-21-2010”的频道ID,那么我希望能够在服务器端检查是否已经有一个与该ID相关联的频道“杰克-JAN-21-2010\” .通过观察onerror()和onclose()回调可以在客户端跟踪(有点),但是我看不到任何服务器端允许我检查与给定ID关联的通道是否是已经开放了.
有没有人知道在使用AppEngine Channel API的同时检查(服务器端)是否已打开频道的智能方法?
第1部分:解决您的问题
如果您确实需要跟踪客户端连接,请参阅下面的第2部分,但我不确定您的问题是否要求您解决问题.
让我看看我是否可以回复你的问题:你正在编写一个聊天应用程序,但这是一个不完全是AJAX的网站(就像gmail一样);该网站包含页面导航,您可能需要在用户点击指向其他页面的链接后重新设置您的频道.当用户导航时,将呈现新页面,并且您希望避免在该点获取新标记;您希望重用具有相同客户端ID的现有令牌和通道.
如果这是正确的,我有两个备用解决方案,一个简单但用户体验不佳,一个更棘手,但最终结果更顺畅.
>保留cookie中的令牌.重新渲染页面时,只需使用cookie中的标记,而不是再次调用channel.create_channel.当令牌过期时,您将获得一个错误回调,就像用户留在原始页面上一样;此时,再次调用channel.create_channel.这个问题是由于Comet连接的性质,重新连接可能很慢(在坏情况下最多10秒或更长时间).
>在iframe中包裹与聊天无关的整个网站.将频道创建代码和UI放在外部iframe中.这样,您不必在每次用户导航时重新连接.这可以避免导航停机.请注意,orkut使用这种技术,浮动div,因为少量的Firebug调查将揭示.
第2部分:您的功能请求
如果结果我误解了你真的需要跟踪客户端连接:
现在没有内置的方法来检查客户端是否已连接到客户端ID标识的通道.
但是,我现在正在努力添加“在线状态”(在聊天意义上),这样当您的应用程序连接或断开与使用给定客户端ID创建的通道时,您的应用程序可以注册以获取帖子.您也可以“探测”状态,查询给定的客户端ID是否已连接(仍在处理此部分的详细信息).
请注意,这不是基于令牌的,而是基于客户端ID.
我还没有明确的发布日期,但正如我所说,我正在积极研究它.
在此期间,您可以使用来自客户端的心跳HTTP请求返回到您的应用程序,该应用程序每隔一分钟就会说“嘿,我还在这里”.您需要运行某些任务,例如每2分钟运行一次,并将未签入的任何客户端标记为非活动状态,并且您需要将此数据存储在某个位置.
翻译自:https://stackoverflow.com/questions/4804129/appengine-channel-api-best-way-to-check-if-a-channel-is-still-open-server-sid
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 支付宝小程序向个人开发者开放公测:处于限量状态
- JDK 11 已处于特性冻结状态,看看 Java 11 API 变更提案
- Tcp 连接处于异常状态的一点总结 (close wait & time wait)
- Android获取软键盘的高度、键盘的打开与关闭、监听键盘处于打开还是关闭状态
- 解决VirtualBox升级到5.2.6后无法启动之前版本关闭的处于休眠状态的芯片组为ICH9的虚拟机报告错误...
- Python 3.7 上架微软商店,尚处于评估阶段
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。