【发布时间】:2011-02-04 00:14:26
【问题描述】:
我在一个有大量 AJAX 请求流量的 ASP.NET 应用程序中。
一旦用户登录我们的网络应用程序,就会创建一个会话来存储该用户的状态信息。目前,我们保持会话数据一致的解决方案非常简单和粗暴:每个请求都需要在处理之前获得排他锁。
这适用于传统的 Web 应用程序。但是,当 Web 应用程序转而支持 AJAX 时,它变得不高效。很有可能多个 AJAX 请求同时发送到服务器而不重新加载网页。如果所有的 AJAX 请求都被排他锁序列化,那么响应就不会那么快了。无论如何,许多不访问相同会话变量的 AJAX 请求也会被阻止。
如果我们没有为每个请求设置一个独占锁,那么我们需要仔细处理所有的竞争条件以避免死锁。恐怕这会使代码变得复杂和错误。
那么,是否有任何最佳实践来保持会话数据一致并保持代码简洁明了?
【问题讨论】:
-
您的会话区域中有哪些需要锁定的数据?
-
@Lasse,会话数据包括与存储的连接、用户在场时间等。这组数据可能会随着产品的生命周期而变化。
-
但是您需要锁定才能使用其中的任何一个吗?
-
@Lasse,是的,保持主题一致。例如,某些请求可能会使用一个会话变量,并在最后增加该值。由于会话状态很复杂,因此很难在代码中布局互斥锁或锁定到最小粒度。目前,我们只有一个大的互斥锁/锁来覆盖整个会话。这很简单,但也很愚蠢。
标签: asp.net session locking consistency