终于解决socket 10053问题

原创
2013/07/04 12:27
阅读数 9.2W

socket 10053问题表现为后台服务器抛出异常,说前端主动断开,那么原因是什么?这个问题已经困扰我好长时间,终于今天找到原因了。(如果只想看结果,可以跳过下面若干段落)

开始我以为服务器可能会有某些bug,于是查到python 2.7有一个 问题和patch,但是这个只解决了问题的显示,并不能真正解决问题。

在chrome中你会看到请求被cancel掉,但是没有任何的人为操作,为什么会被cancel掉呢?在stackoverflow上找到 一篇文章 这里讲述了如何查看chrome的event。根据指引,我学会了如何看event,发现的确是chrome断开的,但是为什么呢,还是无法知道。

突然之间不知是因为什么,我看到了jquery调用时可以传递timeout参数,我突然想到,会不会是它造成的。打开我那个出错页面,在console中输入: $.ajaxSettings,结果我看到了里面的确有timeout:500的信息。我说什么在event中看到了,当执行到500毫秒时会主动取消,同时会向服务器发出断开的消息呢,原来都是这个timeout害的。

知道了原因,于是查找哪里调用。终于在plugs中的一个jqmultipleselect插件中发现,它使用了一个叫localisation的插件,用来动态从后台装载js的翻译文件。就是在这里,它调用了$.ajaxSetup来设置超时时间为500。它原来的代码是保存了原始的timeout值,在处理之后又改回去,但是因为全局的timeout在开始是undefined的状态,所以在恢复时无法再恢复成原来的状态(即未定义的状态)。我找到 localisation 的网站,发现它已经升级到了1.1.0,我的是1.0.4。于是我下载了新的代码,它已经进行了调整,不再使用$.ajaxSetup来处理,而是在调用$.ajax时进行处理,所以这个问题在升级到新版本后终于被解决了。

所以,以后如果有类似10053的问题,不妨考虑一下是不是jquery的设置上有问题。当然10053并不全是因为jquery引起的。

展开阅读全文
打赏
3
21 收藏
分享
加载中
赞一个,楼主调试的时候很有耐心
2013/07/04 17:30
回复
举报
更多评论
打赏
2 评论
21 收藏
3
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部