终于解决socket 10053问题

流过昼夜 提交于 2019-11-26 14:13:08

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引起的。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!