Android端SocketIO连接报错EngineIOException: websocket error(iOS正常)求助
Android SocketIO 连接报错 EngineIOException: websocket error(iOS端正常)
问题详情
Android端使用SocketIO 2.0.0版本建立连接时,出现EngineIOException: websocket error异常,但iOS端连接完全正常。错误截图如下:
Android端核心实现代码:
override fun init() = callbackFlow { val accessToken = tokenStorage.accessToken ?: return@callbackFlow val option = IO.Options.builder() .setUpgrade(false) .setTransports(arrayOf(WebSocket.NAME)) .setExtraHeaders(mapOf("Authorization" to listOf("Bearer ".plus(accessToken)))) // 不加会返回401未授权 .build() socket = IO.socket(BuildConfig.WS_URL, option) socket.on(Socket.EVENT_CONNECT) { trySend(true) } socket.on(Socket.EVENT_CONNECT_ERROR) { Log.d("xxxx", "asSocketPayload error: ${it[0]}") } socket.on(DEFAULT_EVENT) { it[0].asSocketPayload() } socket.connect() awaitClose { socket.disconnect() } }
解决方案尝试
1. 调整升级配置
你当前强制禁用了连接升级(setUpgrade(false)),部分服务端需要通过HTTP握手完成升级后才能建立WebSocket连接。尝试移除该配置,让客户端自动处理升级流程:
val option = IO.Options.builder() .setTransports(arrayOf(WebSocket.NAME)) .setExtraHeaders(mapOf("Authorization" to listOf("Bearer $accessToken"))) .build()
2. 校验请求头格式
确认服务端是否支持多值格式的请求头,尝试将Authorization头的值改为单个字符串(部分服务端不兼容列表格式):
.setExtraHeaders(mapOf("Authorization" to "Bearer $accessToken"))
3. 排查SSL证书问题(若使用WSS协议)
如果你的连接地址是wss://开头,Android端可能存在SSL证书验证失败的情况:
- 排查阶段可临时关闭证书验证(仅用于测试,生产环境禁止):
val sslContext = SSLContext.getInstance("TLS") sslContext.init(null, arrayOf<TrustManager>(object : X509TrustManager { override fun checkClientTrusted(chain: Array<out X509Certificate>?, authType: String?) {} override fun checkServerTrusted(chain: Array<out X509Certificate>?, authType: String?) {} override fun getAcceptedIssuers(): Array<X509Certificate> = emptyArray() }), SecureRandom()) val option = IO.Options.builder() // 其他配置 .setSSLContext(sslContext) .setHostnameVerifier { _, _ -> true } .build()
- 生产环境需确保设备信任服务端证书,或在项目中导入自定义证书。
4. 确认服务端版本兼容性
SocketIO 2.0.0客户端需要匹配2.x版本的服务端,若服务端是3.x及以上版本,会因协议不兼容导致连接失败,建议确认服务端版本并保持客户端与服务端版本匹配。
5. 排查网络环境
部分Android设备的代理网络、内网防火墙会拦截WebSocket连接,尝试切换到手机流量或其他无限制网络测试。
内容的提问来源于stack exchange,提问作者Stevie
相关产品推荐
相关产品推荐

