iOS15 断链问题,后台使用Spring Boot,默认内置的web容器为tomcat。因iOS15默认开启NSUrlSession WebSocket 实验特性导致websocket连接断连,safari中可以通过关闭该特性解决,但是在webview中或其他浏览器中均无法正常使用。猜测原因为NSUrlSession在处理数据多帧发送时(因为单帧接收数据正常,不会引起断连)存在着无法正确解析压缩解压数据的bug。
解决方案
- 启动jar包时使用参数设置jvm参数禁用permessage-deflate extension:
-Dorg.apache.tomcat.websocket.DISABLE_BUILTIN_EXTENSIONS=true
- 如果使用嵌入式 tomcat 将项目导出到 JAR 文件,则可以
main
在执行之前在其中运行它SpringApplication.run
:
public static void main(String[] args) {
System.setProperty("org.apache.tomcat.websocket.DISABLE_BUILTIN_EXTENSIONS",String.valueOf(true));
SpringApplication.run(YourApplicationClass.class,args);
}
- 如果您将应用程序打包为 WAR 文件,您可以尝试以下操作:
@SpringBootApplication
public class YourApplicationClass extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
System.setProperty("org.apache.tomcat.websocket.DISABLE_BUILTIN_EXTENSIONS",String.valueOf(true));
return application.sources(YourApplicationClass.class);
}
}