java.net.SocketException: Socket closed -3

  • Creator 版本:2.4.0

  • 目标平台: Android

  • 详细报错信息,包含调用堆栈:

  • 重现方式:远程加载bundle内的资源

  • 之前哪个版本是正常的 :

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :

不是必现的,批量加载bundle内资源时有部分资源会出现这种情况,而且很容易就重现

  • 出现概率:远程加载资源多的情况下有很大概率会出现

  • 额外线索:自己封装了 cc.assetManager.preloadAny 第一参数传的是 uuids 数组

这种问题,直接导致了app运行时加载远程bundle资源时耗时非常严重甚至是卡住

额外线索 :下载失败的文件是 2.7M的 ttf字体

跟字体类型无关,感觉跟文件较大关联性比较大,另外降低下载的并发数也不能避免这种问题,没查原生的下载代码,但是应该是存在某些逻辑问题

就是和文件较大有关,较大文件在超时时间内无法完成下载就会导致这个问题,引擎底层bug,不应该设置下载超时时间,而是应该设置连接响应超时时间,

就是这个位置的问题,你看下这篇就知道啥原因了https://www.codenong.com/jsdf7b31b4a624/

1赞

嗯,这个问题已经在某一个2.x版本的发布贴中得到了确认,官方后来追加了超时参数设置,允许开发自己设置超时时间

设置超时时间并不能彻底解决问题,这个问题根本原因是设置超时的方法错了,不应该设置callTimeOut,我们用的是2.4.6,问题依然存在,调用方法改为pingInterval问题完美解决,想要复现这个问题可以尝试在弱网下下载10M以上的文件,并将c++的DEFAULT_CONNECTION_TIMEOUT改为小点的,我复现的时候改成了4,这样就能基本必现了,因为弱网下四秒内肯定下载不完这个文件,改为pingInterval代表和服务器的响应时间超时, 如果还在下载而不是卡住了,就不会导致超时,callTimeOut代表的是整个请求时间,不管你有没有响应,在不在下载,只要是在规定时间没有下载完,就会超时被关掉,这是关键

2赞

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。