用户关闭浏览器而不注销

时间:2012-11-01 10:58:24

标签: asp.net-mvc-3 session social-networking

我正在ASP.NET MVC 3中开发一个社交网络。每个用户都必须能够看到连接的人。

这样做的最佳方式是什么?

我在数据库的表Contact中添加了一个标记,当用户登录时将其设置为true,并在用户注销时将其设置为false

但是这个解决方案的问题是当用户关闭浏览器而不注销时,他仍然会保持连接状态。

1 个答案:

答案 0 :(得分:3)

真正了解用户当前连接的唯一方法是在用户和服务器之间保持某种连接。立即想到两个选项:

  1. 使用javascript定期使用ajax调用您的服务器。您将在服务器上有一个特殊的端点,用于更新“上次连接的时间”状态,并且您将有第二个端点供用户轮询以查看谁在线。
  2. 使用websocket维护与服务器的持久连接
  3. 选项1应该相当容易实现。最重要的是要注意这会增加进入服务器的请求数量,并且您必须相应地进行计划,以便处理可能产生的流量。通过配置javascript计时器回调到服务器的频率,您可以控制服务器上的负载量。

    如果您在没有库支持的情况下执行此操作,则选项2可能会更复杂一些。当然还有像SignalR那样的库,这使得这很容易做到。这也会对您网站的性能产生影响,因为每个用户都将保持持久连接。这种方法的优点是它减少了对选项1的轮询需求。如果您使用这种方法,那么向用户A推送消息也很容易,即用户B已离线。

    我想我也应该提一个非常简单的第三种选择。如果您认为自己的网站非常具有互动性,则可以跟踪他们上次向您的网站发出请求的时间。这当然可能无法给出足够的准确性来确定用户是否“已连接”。