Ajax异步请求阻塞情况的解决办法(asp.net MVC Session锁的问题)
- 讨论今天这个问题之前,我们先来看下浏览器公布的资源并发数限制个数,如下图
不难看出,目前主流浏览器支持都是最多6个并发
需要注意的是,浏览器的并发请求数目限制是针对同一域名的
意即,同一时间针对同一域名下的请求有一定数量限制。超过限制数目的请求会被阻塞,这就是很多网站专门解决这个问题的原因。
有的请求会持续很长时间,如果把 img, css, js… 都放到http://一个域名下面,其他请求就迟迟无法完成,浏览者看来就是『卡住了』。而把图片放到另一个域名之后,css和图片就可以并发请求了。
浏览器并发请求就简单说到这里,原文地址:https://www.zhihu.com/question/20474326
- 下面步入正题,在开发中我遇到一个和奇怪的问题,就是我们接入SSO之后,发现并发请求反而更慢,如图
前面是接入sso之后,后面是没接入sso的情况
后来,找sso那边的同事查问题,他给我发了一个地址 https://blog.csdn.net/littlewrong/article/details/48134535
以下为问题的原因
问:为了可以顺序访问Session的状态值,Session是否提供了锁定机制?
答:Session实现了Reader/Writer的锁机制:
当页面对Session具有可写功能(即页面有<%@Page EnableSessionState="True" %>标记),此时直到请求完成该页面的Session持有一个写锁定。
当页面对Session具有只读功能(即页面有<%@Page EnableSessionState="ReadOnly" %>标记),此时知道请求完成该页面的Session持有一个读锁定。
读锁定将阻塞一个写锁定;读锁定不会阻塞读锁定;写锁定将阻塞所有的读写锁定。这就是为什么两个框架中的同一个页面都去写同一个Session时,其中一个要等待另一个(稍快的那个)完成后,才开始写。
“写锁定将阻塞所有的读写锁定”,也就是说页面在EnableSessionState="True"的情况下没返回输出时,一直持着Session写操作,其他页面对Session的读操作必须等待,而asp.net的aspx页面默认是EnableSessionState="True",每个页面从请求开始至返回一直持着Session写操作,需验证页面必须读取Session值判断,这就是为什么需验证的页面请求被阻塞的原因。只要耗时页面(A页面)没有Session的写操作,也就不会阻塞其他页面的请求,于是修改A页面的EnableSessionState="ReadOnly",例如:<%@ Page Language="C#" AutoEventWireup="true"CodeFile="TBS_Monitor_List.aspx.cs"EnableSessionState="ReadOnly" Inherits="TBS_Monitor_List" %> ,问题解决。
也就是说,在无需对session进行写操作的页面,加上EnableSessionState="ReadOnly"属性,就不会造成Request阻塞的情况了。
这个是asp.net的解决方式,后来我又查了下MVC的解决方案,这里是随意找的一篇:https://blog.csdn.net/paolei/article/details/38052129
具体解决方案就是在 controller上打个[SessionState(SessionStateBehavior.ReadOnly)] 的标签,由于我的项目中没有对session进行写操作的地方,所有我在BaseController上打了标签,最终的结果就是问题解决了,亲测有效
Ajax异步请求阻塞情况的解决办法(asp.net MVC Session锁的问题)的更多相关文章
- [转载]# Ajax异步请求阻塞情况的解决办法
最近使用ExtJs4的mvc模式在开发了在线漫画的后台,因为异步请求比较多,有的回应时间长,有点短.我发现在多次并发的情况下,会造成阻塞的情况.也就是说如果回应时间长的请求还在进行中,短的请求却被挂起 ...
- Ajax异步请求阻塞情况的解决办法
最近使用ExtJs4的mvc模式在开发了在线漫画的后台,因为异步请求比较多,有的回应时间长,有点短.我发现在多次并发的情况下,会造成阻塞的情况.也就是说如果回应时间长的请求还在进行中,短的请求却被挂起 ...
- 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回
作者:ssslinppp 时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MV ...
- Ajax回退刷新页面问题的解决办法
在脚本之家看到一篇文章,觉得以后可能会用上,但是竟然不能收藏,所以只能将其转到博客园. 以下是原文地址: http://www.jb51.net/article/87856.htm 这篇文章主要介 ...
- MVC&WebForm对照学习:ajax异步请求
写在前面:由于工作需要,本人刚接触asp.net mvc,虽然webform的项目干过几个.但是也不是很精通.抛开asp.net webform和asp.net mvc的各自优劣和诸多差异先不说.我认 ...
- ajax异步请求不能刷新数据的问题
搞了两三天的问题,今天解决了.总结下: function reportGrpChange(cuid, title){ document.getElementById('reportFrameDiv') ...
- 66.ajax--ajax请求多个url解决办法
ajax请求多个url解决办法 以下四种方法是我找的,我也进行实践过. 测试中有四个请求接口,原本需要13S,用了第三种方法缩减到7S,但是仍不能达到2S以内. 所以仅供参考,待我找到能缩减到2S以内 ...
- spring HandlerInterceptorAdapter拦截ajax异步请求,报错ERR_INCOMPLETE_CHUNKED_ENCODING
话不多说,直接上正文. 异常信息: Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING 问题描述: 该异常是在页面发送ajax请 ...
- jquery Ajax异步请求之session
写了一个脚本,如下: $(function () { $("#btnVcode").click(function () { var receiveMobile = $(" ...
随机推荐
- arcgis 添加经纬度坐标点
ArcGIS 10.2导入X.Y坐标(经度.纬度),生成Shapefile点数据 参考博客很完整 基站-纬度-经度 1---- 2----X 经度 Y 纬度 Z高程(没有) 3---一开始只定 ...
- Consider defining a bean of type 'com.lvjing.dao.DeviceStatusMapper' in your configuration.
"C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" "-javaagent:C:\Program Files\JetBra ...
- AutomaticReferenceCounting.html#runtime-support
https://clang.llvm.org/docs/AutomaticReferenceCounting.html#runtime-support Runtime support This sec ...
- 博三F5第一次站立会议(2019-03-09)
时间:2017-03-09 地点:博三414寝室 时长:一个小时 到勤:全员到勤.(注:寝室有点乱,不敢附上会议图片~~~) 谈论内容: 大致确定本周计划与下周打算(注:后期可能有所改变) 本周计划: ...
- mysql 唯一索引与null.md
mysql 的唯一索引要求所有参与的列都不能够为 null 值,如果唯一索引中的任何一个元素含有 null 值,则唯一约束将不起作用. 示例代码 create table tb ( a int, b ...
- springCloud、springBoot学习
http://projects.spring.io/spring-cloud/ 官网https://springcloud.cc/spring-cloud-netflix.htmlhttp://cl ...
- slf4j的使用
1.导入jar包 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api< ...
- [USACO07OPEN]便宜的回文Cheapest Palindrome
字串S长M,由N个小写字母构成.欲通过增删字母将其变为回文串,增删特定字母花费不同,求最小花费. 题目描述见上 显然 这是一道区间DP 从两头DP,枚举长度啥的很套 ...
- js cookie 操作 封装
pCookie.js (function(){ var PotatogCookie = {}; //设置cookie PotatogCookie.set = function(key, value, ...
- 批量找注入 python3+sqlmap结合
注入一直都是用sqlmap 导致本来就不怎么精通的手工注入现在就忘的一干二净 想实战练习 却一时又找不到有注入的网站 于是便有了这篇文章 想找个批量获取域名链接的工具 但都是只是获取域名而 ...