我正在使用 Ktor Client 在 Android 应用程序中建立 websocket 连接。使用移动数据时,连接在模拟器甚至智能手机上都可以正常工作。使用wifi时开始出现问题。在智能手机上启用 wifi 后,通过 Ktor 客户端的正常 HTTP 请求继续工作,但 websocket 连接失败并出现超时异常:
请求 wss://xxx 失败并出现异常:io.ktor.network.sockets.ConnectTimeoutException:连接超时已过期 [url=wss://xxx, connect_timeout=unknown ms]
我的代码如下:
override suspend fun initSession(userId: Int): Resource<Unit> {
return try {
socket = client.webSocketSession {
url(CallSocketService.Endpoints.Base.url + "/$userId")
}
if(socket?.isActive == true) {
Resource.Success(Unit)
} else Resource.Error("Couldn't establish connection")
} catch (e: Exception) {
e.printStackTrace()
Resource.Error(e.localizedMessage ?: "Unknown Error")
}
}
我的清单包含互联网权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
该问题已在多个 wifi 网络中的多个设备上进行了测试。所有组件的 Ktor 客户端版本为 1.6.7。
我真的不知道为什么 websocket 只在 wifi 上失败。期待更懂的人。
提前致谢!