问题:
1、当Client端同时有多个指向同一个域的xmlhttp请求并发,虽然xmlhttp异步执行,但好像没有实现多个请求并发,而是一个个请求顺序执行?
2、当Client端某个xmlhttp请求没有返回响应,这时候您跳转同一个域下其他代码页面,好像会等待xmlhttp请求返回后才能正常跳转?
出现以上问题的原因是:IIS的Session对并发的锁定,即对会话状态的访问专属于每个会话,这意味着如果两个不同的用户同时发送请求,则会同时授予对每个单独会话的访问。 但是,如果这两个并发请求是针对同一会话的(通过使用相同的 SessionID 值),则第一个请求将获得对会话信息的独占访问权。 第二个请求将只在第一个请求完成之后执行。 (如果由于第一个请求超过了锁定超时时间而导致对会话信息的独占锁定被释放,则第二个会话也可获得访问权。)
解除锁定:
在asp页面可以添加<%@ ENABLESESSIONSTATE=false %> ;
在asp.net页面的Page设置中添加属性EnableSessionState="False"。EnableSessionState属性默认为true。
现在只能说并发的问题已经部分解决,为什么呢?如果页面同时加载n个页面,n>6,并发的问题好像又出现了,并没有实现全部页面一起并发请求。原因是浏览器也会有设定“浏览器并发连接数”。
浏览器默认对同一域下的资源,只保持一定的连接数,会阻塞过多的连接。rfc2616建议不超过2个。
不同浏览器的默认值不一样,对于不同的HTTP协议其值也不一样。
浏览器默认最大并发连接数
浏览器 |
HTTP 1.1 |
HTTP 1.0 |
IE 6,7 |
2 |
4 |
IE 8 |
6 |
6 |
Firefox 2 |
2 |
8 |
Firefox 3 |
6 |
6 |
Safari 3, 4 |
4 |
4 |
Chrome 1,2 |
6 |
? |
Chrome 3 |
4 |
4 |
Opera |
4 |
4 |
浏览器并发连接解决方案
1、增大浏览器最大连接数
2、“对同一域下的资源”:使用多个域名