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上打了标签,最终的结果就是问题解决了,亲测有效
转载于:https://www.cnblogs.com/han2017/p/9603501.html
Ajax异步请求阻塞情况的解决办法(asp.net MVC Session锁的问题)相关推荐
- php session 异步,Ajax异步请求PHP服务器,如何做到无阻塞响应 原创 学习与分享 PHP自学...
最近发现了一个ajax异步请求的问题,用$.post.$.get.$.ajax请求PHP服务器时,总是无法异步返回数据. 经多次测试才发现: -- 不同浏览器,请求不同域名-不阻塞:无需实验 -- 不 ...
- php 返回字符串给aja,解决ajax异步请求返回的是字符串问题
1.返回结果差异 js获取后打印res.code无结果.因为返回数据格式不正确. php文件添加header头: header('Content-Type:application/json;'); 或 ...
- 解决ajax异步请求数据后swiper不能循环轮播(loop失效)问题、滑动后不能轮播的问题。
解决ajax异步请求数据后swiper不能循环轮播(loop失效)问题.滑动后不能轮播的问题. 参考文章: (1)解决ajax异步请求数据后swiper不能循环轮播(loop失效)问题.滑动后不能轮播 ...
- 解决Ajax异步请求中传数组参数,后台无法接收问题
解决Ajax异步请求中传数组参数,后台无法接收问题 参考文章: (1)解决Ajax异步请求中传数组参数,后台无法接收问题 (2)https://www.cnblogs.com/wangshuaiand ...
- jQuery使用ajax异步请求400解决方法
jQuery使用ajax异步请求访问状态码400解决方法: 先直接上结论:首先检查下自己使用的请求方式,我原来用的是post方式,更改为ajax之后就解决了,才反应过来应该是版本不兼容的问题! < ...
- php原生的异步请求,原生JavaScript实现Ajax异步请求
ajax现在是一种非常流行的技术,现在虽然可以利用JQuery或者一些第三方插件甚至微软提供的一些控件可以方面的实现ajax功能,但是明白其原理也是非常重要的,下面是来使用纯javascript实现获 ...
- html弹窗赋值给查询框,bootstrap模态框动态赋值, ajax异步请求数据后给id为queryInfo的模态框赋值并弹出模态框(JS)...
/查询单个 function query(id) { $.ajax({ url : "/small/productServlet", async : true, type : &q ...
- 关于ajax异步请求后台接受参数为null的问题
关于ajax异步请求后台接受参数为null的问题 问题描述: 近日楼主在前端页面,使用ajax异步post方式发送请求, 1: 前台访问路径正常,参数携带正常 2: 后台拦截请求成功,使用reques ...
- 从浅到深,带你彻底搞懂AJAX异步请求
在平时开发过程中,异步请求似乎比同步请求出现的频率还要高一些.这是为什么呢?在同步请求时如果对网页的部分内容进行更新时,是不是就必须重载整个页面.这样肯定是不行的,这时就可以采用异步请求来解决此问题. ...
- ajax异步请求,以及ajax异步返回的数据的处理方案
为什么JS会有同步任务和异步任务: js是单线程,会按照顺序执行一个一个的任务,如果遇到某个任务像网络请求一类的需要延长执行回调函数,那么页面就会阻塞,所以引入了异步的概念. 同步任务:同步任务不需要 ...
最新文章
- 放射科医生选择AI供应商的10大标准
- git遇到的问题之“Please make sure you have the correct access rights and the repository exists.”...
- openvc学习笔记(4)——两种方法在没有环境下运行程序
- spring cloud构建互联网分布式微服务云平台-Ribbon
- aircv 安装_Python 通过截图匹配原图中的位置(opencv)实例
- java 反射api_反射是最重要的Java API
- C | 构成和编码规范
- Canny边缘检测算法原理及其VC实现详解(一)
- linux ssh 查看vg,linux SSH证书登录
- isFinite使用说明
- 云计算介绍、TCP/IP协议及配置
- Java Maps的9个常见问题
- ubuntu MySQL的卸载
- 中国省市区 json
- 每日工作问题记录总结(好习惯 打卡2/?)
- 计算机教师中级职称个人总结,职称个人总结
- python问题 Traceback (most recent call last)
- phpcms v9 二次开发 前台上传图片
- 手把手教你实现一个人脸认证登录系统
- 批量打印电子发票方法,发票连续打印教程分享
热门文章
- python open 编码格式_Python以unicode编码格式读入外部文件
- Linux的版本可分为,Linux不同分类标准下的各种版本解读
- c语言创建若干个成绩栏目,2015年计算机二级《C语言》考试上机测试题(6)
- python脚本实现ipv6的ddns功能
- shell脚本 把一个文件的内容全部转换为大写
- C++ 运算符重载四(自定义数组类)
- 事件处理程序的处理顺序问题
- 【训练平台】mmdetection训练自己的标注数据, 以faster RCNN ,yolo为例子
- windows 下 git bash 打开特定的文件目录与相关操作
- spark 数据倾斜调优