【问题标题】:Accounting for users that have left website without using onunload对未使用 onunload 离开网站的用户进行计费
【发布时间】:2017-10-03 14:25:19
【问题描述】:

我有一个资源非常有限的网络服务(我将能够同时处理大约 3 个用户)。

当用户与我的网站交互时,他们会在服务器端启动一个复杂的流程。 (这个过程是限制因素,因为我的服务器机器将无法并行处理许多,并且客户端无法在他们这边运行。)

我的问题是如何确保为离开的用户结束流程,例如关闭窗口。

我考虑过 onunloadonbeforeunload,但它们也由网站内的链接触发(我需要用户能够与流程进行交互)所以这似乎不是一个选择。

根据其他问题(例如see this),这种方法似乎有问题,但如果有办法在执行由 onunload 触发的操作时检查用户是否仍然是活动用户(即使在网站的不同页面),但我不知道该怎么做。

我也考虑过定期检查活跃用户列表并取消已离开用户的流程,但我不知道这是否可能。

我对 cookie 的经验为零,但这里可以使用它们吗?服务器能否访问断开连接用户的(仍然存在的)cookie?

这听起来像是解决这个问题的合理方法?

【问题讨论】:

  • 一旦网页加载完毕,除非您使用 WebSockets 或某种轮询,否则无法判断用户是否在他们面前打开了该页面。但是看到服务器在资源上的限制可能是不合理的。我会把更多的精力放在使这些流程变得更高效上。比如,这些进程是否必须在该服务器上运行,与服务 Web 请求的服务器相同?也许网络服务器正在尝试做太多事情。
  • 理想情况下,你是对的。但这是一个非常特殊的研究项目,恐怕我在这些方面几乎无能为力(缺乏获得我不会获得的资源或取得让我在研究界出名的突破;))。

标签: asp.net-mvc web-services cookies design-patterns


【解决方案1】:

诸如此类的情况通常由心跳处理。让您的客户端定期向服务器发送心跳(本质上是 ping),通知它仍然活着并且对进程的结果感兴趣。服务器会自动杀死那些在配置的时间内没有收到客户端心跳的进程。

我考虑过 onunload 和 onbeforeunload

你是对的——你不能依赖他们。

我对 cookie 的经验为零,但这里可以使用它们吗?

没有。 Cookie 维护通过 HTTP 调用发送到服务器的客户端状态。因此,服务器不管理 cookie。相反,他们只查看它们以识别状态。

【讨论】:

  • 是的,这听起来很有希望。我会检查心跳,谢谢!
  • 我当然会 ;) 我只需要一点时间来解决这个问题,但如果我设法让它发挥作用,我绝对会记得去做。
  • 我挣扎了一会儿,但我现在有心跳了 :) 感谢您的贡献!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
相关资源
最近更新 更多