【问题标题】:Client View of Everyone Looking at a Webpage每个人都在查看网页的客户端视图
【发布时间】:2010-09-10 21:19:04
【问题描述】:

首先让我说我在这个问题上真的感到无方向。我正在使用 windows 集成安全,我可以使用 vb.net 从 AD 中查找有关用户的信息。我还有其他关于用户的信息,我可以通过获取登录身份名称从 MS SQL 2005 服务器中查找。

我想做的是向任何一个正在查看该网页的用户显示有关所有积极查看该网页的用户的信息。信息来自 AD 和 SQL,我可以毫无问题地检索它。

到目前为止,我的路由一直使用 SQL 来存储用户首次加载页面的时间。我不知道如何在用户离开页面时显示。我尝试使用 ajax 计时器每隔一秒更新一次用户访问的时间戳,这也会触发表将状态更改为未在 5 秒内更新的任何记录的非活动状态。这仅适用于少数用户,但我发现当我有超过几个人查看该页面时,1 秒更新是不可靠的。当用户最小化页面时,我似乎也有问题。这有时会停止来自 ajax 计时器的更新,并在用户仍在查看页面时将其踢出列表。

此功能对其所在网站的功能并不重要,因此一年多前我就放弃了它。从那时起,我真的很痛苦,我想不出办法来完成这项工作。我的搜索让我走上了许多徒劳无功的道路,所以我真的很感激可以提供的任何帮助,即使它只是朝着正确方向的引导。

【问题讨论】:

    标签: .net asp.net sql-server vb.net ajax


    【解决方案1】:

    答案可能取决于您需要显示的准确度。如果只是为了让用户了解其他人在使用该网站,我会建议类似于您所描述的内容,但会降低更新频率:

    • 在页面请求中将用户与页面(和时间戳)相关联
    • 使用 Ajax 计时器每分钟左右更新一次时间戳
    • 通过 window.onbeforeunload 事件(或类似事件)终止关联
    • 假设任何早于一分钟(和一点)的时间戳都已失效

    您可以尝试了解人们离开页面的一些方式,但这绝不是万无一失的。关于最小化页面,我想他们是否真的在查看页面是有争议的;)

    【讨论】:

      【解决方案2】:

      我认为您能做的最好的事情就是为“访问页面”设置一个阈值。让自动化任务每 60、120、300 或某些秒数运行一次,以清除任何早于指定时间量的条目。当用户离开页面时,没有办法可靠地检测(我知道)。您可以做的最好的事情是“假设”用户在经过一定时间后停止使用该网站。因此,您将存储用户、页面和查看时间。一旦观看的时间超过了您的阈值,请将其删除。

      【讨论】:

      • 我认为这可行,但也会影响页面的功能。用户可能会使用该页面长达两个小时。这也意味着他们离开时会延迟更新。最小化这方面的功能对于功能非常重要。
      • 没有其他 100% 可靠的方法可以做到这一点。您可以尝试使用 AJAX 来持续访问数据库,但这并不可靠,而且似乎对数据库来说是不必要的流量。
      【解决方案3】:

      我不认为每秒都有一个 AJAX 请求是个好主意,这太啰嗦了。

      我认为大多数人通过仅记录某人何时向该站点发出请求以及从那时起记录到threshold 用户正在“访问”该站点来实现此功能。如果用户在到达threshold 之前没有发出另一个服务器请求,那么我们假设他们已经继续前进。

      【讨论】:

      • 嗯,这确实是网站功能的问题。用户的信息表明他们可以回答代理的问题并在更新时查看统计信息。可能有很长一段时间不活动。
      • 那就有点棘手了。如果您要求当前用户列表对于某些网站功能来说是准确的,而不是为了兴趣而有点准确('哦,看,约翰也在使用该网站!'),那么情况就不同了。
      • 其他一些需要考虑的事情:当您说他们可以回答问题时,如果我让网站保持打开状态然后去喝咖啡怎么办?还是回家过夜?如果您希望长时间不活动仍能正确计为在线,那么这种事情在网页上实际上是不可能的
      • 如果您希望用户保持联系,那么老实说,更好的解决方案是某种厚客户端 IM; jabber、skpye、msn。胖客户端应用程序可以通过检查鼠标/键盘等活动来更好地猜测可用性,而您的网络应用程序无法做到这一点。
      【解决方案4】:

      如果在页面上有一个小型 Flash 应用程序,该应用程序可以从服务器传输微小的“心跳”数据流……足以让服务器知道何时删除了流,从而知道客户端何时删除已离开该页面。

      【讨论】:

        【解决方案5】:

        对于正文有一个 onunload 脚本:

        在该脚本中,发送一个 ajax 调用来说明用户离开了页面。

        【讨论】:

        • 我看过一次 - 我的记忆有点模糊 - 但我想我记得 onunload 有时会在我不想要的时候触发,比如回发。
        • 如果用户在接下来的 16 小时内离开计算机,或者电源出现故障,则永远不会调用 onunload。
        【解决方案6】:

        第一个答案有效。

        但是……

        您没有提到用户已登录,所以我怀疑这不是您正在查看的内容。但是,如果您只是每分钟左右请求登录用户列表,您当然可以简化事情。

        【讨论】:

          猜你喜欢
          • 2012-07-15
          • 2015-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-11
          • 1970-01-01
          • 2012-10-11
          • 2016-05-10
          相关资源
          最近更新 更多