今天解决了一个bug。看似是UI的bug,最后发现IE的设置问题(严格来说,IE6这么做没有问题,因为HTTP协议的规范如此)。

  先描述一下问题: 有一个页面管理Job,选中一些Job可以Run,每次只能启动一个。还有另一个页面通过Timer定时发Ajax请求服务端,查询并显示Job的运行状况(进度)。

  奇怪的问题出现了: 
  1)在FireFox和IE8运行正常(貌似正常,稍后再解释)。其他浏览器未测试。 
  2)IE6,7及更早版本,Timer无法检测到多于1个的Job运行。

  先检查了一遍代码,Timer的控制没有问题。不行就使用Fiddler吧。刚好是IE的问题。

  观察HTTP发现一个现象,运行Job的HTTP似乎没有成功,因为Body是-1,之后是每隔一秒的Timer发起的HTTP。如果再启动一个Job,发现Timer停止了!!

  等待第一个Job运行成功之后,Timer又恢复了(重新发送Ajax请求)!! 似乎是运行Job的请求阻塞了(实际上该请求长时间没有返回,因为运行Job需要几分钟甚至更多时间)。为啥不使用DWR3.0的Push技术?后来跟同事讨论明白,这不过是把Timer从客户端转移到了服务端。记起来了,俺好像读DWR源代码的时候(当时对如何实现推非常感兴趣),见过一段代码分析Browser的类型和连接数,有的情况还抛出了异常。

  肯定是IE6有连接数限制问题,RunJob占用了一个(几分钟不等), Timer占用了一个(很短暂)。后来得知,默认情况下,它不支持同时超过2个连接。

public class BrowserDetect
{
/**
* How many connections can this browser open simultaneously?
* @param request The request so we can get at the user-agent header
* @return The number of connections that we think this browser can take
*/
public static int getConnectionLimit(HttpServletRequest request)
{
if (atLeast(request, UserAgent.IE, 8))
{
return 6;
}
if (atLeast(request, UserAgent.Firefox, 3))
{
return 6;
}
else if (atLeast(request, UserAgent.AppleWebKit, 8))
{
return 4;
}
else if (atLeast(request, UserAgent.Opera, 9))
{
return 4;
}
else
{
return 2;
}
}
//....
}

  接下来就是查资料做试验,验证该问题是否正确。通过在注册表设置Internet Settings参数,实现了更多连接。例如10个。 但是Job可能很多,不可能无限制增加连接数,所以RunJob不应长期占用连接,它应该把Job插入队列并立即返回。 至此问题的源头终于找到了,Fiddler又帮了大忙。


  
读源代码是了解技术细节的最好方法,还能学到好的代码风格。

IE6的连接数限制问题的更多相关文章

  1. [转载] Linux下高并发socket最大连接数所受的各种限制

    原文: http://mp.weixin.qq.com/s?__biz=MzAwNjMxNjQzNA==&mid=207772333&idx=1&sn=cfc8aadb422f ...

  2. Linux下高并发socket最大连接数所受的各种限制

    http://blog.csdn.net/guowake/article/details/6615728 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行 ...

  3. Linux下高并发socket最大连接数

    http://soft.chinabyte.com/os/285/12349285.shtml (转载时原文内容做个修改) 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是 ...

  4. 服务器最大TCP连接数及调优汇总

    启动线程数: 启动线程数=[任务执行时间/(任务执行时间-IO等待时间)]*CPU内核数 最佳启动线程数和CPU内核数量成正比,和IO阻塞时间成反比.如果任务都是CPU计算型任务,那么线程数最多不超过 ...

  5. Linux下高并发socket最大连接数各种限制的调优

    1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每 ...

  6. Linux下高并发socket最大连接数所受的各种限制(转)

    1.修改用户进程可打开文件数限制在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个 ...

  7. 单服务器最大tcp连接数及调优汇总

    启动线程数: 启动线程数=[任务执行时间/(任务执行时间-IO等待时间)]*CPU内核数 最佳启动线程数和CPU内核数量成正比,和IO阻塞时间成反比.如果任务都是CPU计算型任务,那么线程数最多不超过 ...

  8. Nginx优化指南+LINUX内核优化+linux连接数优化+nginx连接数优化

    Most setup guides for Nginx tell you the basics - apt-get a package, modify a few lines here and the ...

  9. Linux下高并发socket最大连接数所受的各种限制(详解)

    1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每 ...

随机推荐

  1. Mysql存储过程调用

    mysql存储过程实例教程 发布时间:2014-04-09编辑:JB01 这篇文章主要介绍了mysql存储过程的使用方法,mysql存储过程实例教程,有需要的朋友参考下.   1.1create  p ...

  2. arp命令

    地址解析协议ARP用于将IP地址解析成MAC地址.当把数据包从一个计算机发送到另一个计算机的时候,计算机或路由器使用ARP请求来确定下一跳的MAC地址. MAC地址用于按跳发送数据包,直到达到最终目的 ...

  3. 解决String TestContext下使用junit4抛出异常(java.lang.NoClassDefFoundError)的问题

    Spring版本2.5.5,JUnit 版本 4.8.1,使用了 Spring TestContext 的 SpringJUnit4ClassRunner.一直使用这个版本的JUnit,在写简单的测试 ...

  4. TCP拥塞控制算法 优缺点 适用环境 性能分析

    [摘要]对多种TCP拥塞控制算法进行简要说明,指出它们的优缺点.以及它们的适用环境. [关键字]TCP拥塞控制算法 优点    缺点   适用环境公平性 公平性 公平性是在发生拥塞时各源端(或同一源端 ...

  5. SQL Server 表变量和临时表的区别

    SQL Server 表变量和临时表的区别 一.表变量 表变量在SQL Server 2000中首次被引入.表变量的具体定义包括列定义,列名,数据类型和约束.而在表变量中可以使用的约束包括主键约束,唯 ...

  6. 不谈业务运维的IT主管早晚被淘汰 这里是10条干货

    大数网 吴玉征 先说个真实的故事. 前一段时间,有一家知名的国际连锁咖啡公司的自助交易系统(支付宝.微信.ApplePAY)特别慢,工作人员也不知道为什么.由于他们刚上了业务运维,支持这套系统的云智慧 ...

  7. I/O流——字符流

    字符流 字节流提供处理任何类型输入/输出操作的足够功能,但不能直接操作Unicode字符,因而需要字符流. 字符流层次结构的顶层是Reader和Writer抽象类. 实际上,字符流的底层就是字节流. ...

  8. TCP、UDP、IP 协议分析(转)

    http://blog.chinaunix.net/uid-26833883-id-3627644.html

  9. [OC笔记]@property之个人理解,大神轻拍

    /** * 一个简单的对象 * * @author suzhen * */ public class SimpleObjcet { /** * 声明一个age字段 */ private Object ...

  10. Quickly place a window to another screen using only the keyboard

    http://askubuntu.com/questions/22207/quickly-place-a-window-to-another-screen-using-only-the-keyboar ...