日期:2014-05-17  浏览次数:20648 次

一个很奇怪的IE6问题
在服务器端用JAVA写了一些程序逻辑专门用来控制某一个大的WEB查询应用的并发情况。
基本思路是用一个中间状态表记录状态(t_xxapp_status),
如果都是这个模块在并发,那么它们都会先查这个表,看是否已到了上限,如果没有就插入记录,记录这次跑的开始时间,
(比如只能跑3个,那第4个就不让它继续了,报个错给前台,这一段是有同步控制的),然后开始真正的执行这个查询应用本身,完了最后再更新前面插入的那条记录的结束时间。

这个本来已可用,当时确认时都是人为在一到两台电脑上模拟并发情况,测试通过。
可后来使用了工具,在一台电脑上开九个IE6窗口,同时点,出现奇怪情况。。。

最后九个都返回了查询结果(查询结果是另外一个弹出式WEB窗口),可是数据库表中却只有5条记录。。。
去查LOG,也只有这5条在表里有记录的这几个有LOG输出,可另外4个什么也没留下,就像没有到服务器端跑过一样(因为完全没有任务LOG),可是查询结果又弹了出来。。。

因为这时的该WEB应用并发上限设为了5.所以按理说这四个应该都报错才对,可为什么没报??并且还输出了查询结果,可又为什么没有在LOG里留下任何痕迹。。。太奇怪了。

我个人感觉像是IE6是不是缓存了那个结果画面呀(因为九个WEB窗口设的查询条件完全一样)。
另外使用那个工具如果让它点这九个窗口慢一点好像就没再现过了(50MS),正常。
可设成2MS时,就出现这种奇怪情况。。。

望达人指教!

------解决方案--------------------
是IE本身机制的问题。你在同一台机器上短时间打开多个窗口来模拟多并发请求,不太合适,应该在两台或以上机器上同时进行,每台机器上时间间隔不必这么短。或者你自己写个程序,当时间到达整点的时候(比如每分钟的00秒时)打开页面,这样的话在多个机器上运行就可以自动达到同时请求页面的效果,无需手工控制。
------解决方案--------------------
web开发的系统,多树是由于缓存问题导致你出现那样的问题
不管是IE6还是IE8目前都会有次现象存在的,建议按照:
写一个请求语句,当到达上限的时候请求同时响应,控制到合适的点就行