使用wifi时Ktor客户端WebSocket连接超时

7qhs6swi  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(241)

我正在使用Ktor客户端在Android应用中建立WebSocket连接。当使用移动的数据时,连接在模拟器上甚至在智能手机上都能正常工作。当使用wifi时,问题开始出现。当智能手机上启用wifi时,通过Ktor客户端的正常HTTP请求继续工作,但websocket连接失败,并出现超时异常:
请求wss://xxx失败,出现异常:连接超时异常:连接超时已过期[url=wss://xxx,connect_timeout=未知毫秒]
我的代码如下:

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")
    }
}

我的清单包含Internet权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

该问题在多个WiFi网络中的多个设备上进行了测试。所有组件的Ktor客户端版本均为1. 6. 7。
我真的不知道为什么WebSocket只在WiFi上失败。期待有人知道更多。
提前感谢!

toe95027

toe950271#

这个问题似乎与DNS有关。我已经在youtrack上打开了一个bugreport,在那里我描述了这个问题和解决方案:https://youtrack.jetbrains.com/issue/KTOR-3932
截至本文撰写之日,目前还没有针对Ktor的解决方案,但OkHttp能够解决这个问题。

相关问题