Ale*_*rdt 7 sockets api google-app-engine channel-api
我在AppEngine上构建了一个社交网络/约会类型应用程序,目前我正在添加一个建立在Channel API之上的聊天.但是,我遇到的问题是用户可能会在聊天过程中重新加载或导航到新页面(就像在Facebook中一样).这意味着服务器不容易知道它是否应该为给定客户端生成新的通道ID令牌,或者是否已经为给定客户端分配了通道令牌.
如果有一种方法可以检查(服务器端)特定客户端是否已打开某个频道,那将非常有用.例如,如果我为客户端"Jack"分配了一个"Jack-Jan-21-2010"的频道ID,那么我希望能够在服务器端检查是否已经有一个与该ID相关联的频道"杰克-JAN-21-2010" .这可以通过观察onerror()和onclose()回调在客户端进行跟踪(但有点),但我看不到任何服务器端允许我只检查与给定ID相关联的通道已经开放了.
在使用AppEngine Channel API时,是否有人知道检查(服务器端)是否已打开某个频道的智能方法?
Moi*_*vin 18
如果您确实需要跟踪客户端连接,请参阅下面的第2部分,但我不确定您的问题是否要求您解决问题.
让我看看我是否可以回复你的问题:你正在写一个聊天应用程序,但这是一个不完全是AJAX的网站(就像gmail那样); 该网站包含页面导航,您可能需要在用户点击指向其他页面的链接后重新设置您的频道.当用户导航时,将呈现新页面,并且您希望避免在该点获取新标记; 您希望重用具有相同客户端ID的现有令牌和通道.
如果这是正确的,我有两个备用解决方案,一个简单但用户体验不佳,一个更棘手,但最终结果更顺畅.
保留cookie中的令牌.重新渲染页面时,只需使用cookie中的标记,而不是再次调用channel.create_channel.当令牌过期时,您将获得一个错误回调,就像用户留在原始页面上一样; 此时,再次调用channel.create_channel.这个问题是由于Comet连接的性质,重新连接可能很慢(在坏情况下最多10秒或更长时间).
在iframe中整理与聊天无关的整个网站.将频道创建代码和UI放在外部iframe中.这样,您不必在每次用户导航时重新连接.这可以避免导航停机.请注意,orkut使用这种技术,浮动div,因为少量的Firebug调查将揭示.
如果事实证明我误解了你真的需要跟踪客户端连接:
现在没有内置的方法来检查客户端是否已连接到客户端ID标识的通道.
但是,我现在正在努力添加"在线状态"(在聊天意义上),以便当客户端连接或断开与使用给定客户端ID创建的通道时,您的应用可以注册以获取帖子.您也可以"探测"状态,查询给定的客户端ID是否已连接(仍在处理此部分的详细信息).
请注意,这不是基于令牌的,而是基于客户端ID.
我还没有明确的发布日期,但正如我所说,我现在正在积极努力.
在此期间,您可以使用来自客户端的心跳HTTP请求返回到您的应用程序,该应用程序每隔一分钟就会说"嘿,我还在这里".您需要执行某种任务,每次运行,例如2分钟,并将未签入的任何客户端标记为非活动状态,并且您需要将此数据存储在某个位置.
归档时间: |
|
查看次数: |
3700 次 |
最近记录: |