Ktor/WebSocket - 自动重新连接

问题描述 投票:0回答:2

我在多平台项目(Android/iOS)中使用 Ktor Websocket。我看到 http 请求有 auto-retry,但没有 websocket 连接选项。它可以与 Ktor websocket 或任何其他选项一起使用吗?

kotlin ktor
2个回答
1
投票

我用这样的东西。

while (shouldReconnect){
        try {
            httpClient.webSocket(...) {
                //...
            }
        }catch (e:Exception){
            val waitFor=1000L
            println("failed trying in $waitFor ms")
            delay(waitFor)
        }
    }

0
投票

希望这能帮助您解决这个问题。

class WebSocketManager(
    private val client: HttpClient,
    private val url: String
) {
    private var webSocketSession: DefaultClientWebSocketSession? = null

    private val retryDelayMillis = 1000L // Initial delay for retry
    private val maxRetryAttempts = 5 // Maximum number of retry attempts

    fun connect() {
        GlobalScope.launch {
            var retryCount = 0
            while (retryCount < maxRetryAttempts) {
                try {
                    client.webSocket(method = HttpMethod.Get, host = url) {
                        webSocketSession = this
                        // Handle WebSocket events
                    }
                    // WebSocket connection successful, exit retry loop
                    return@launch
                } catch (e: Exception) {
                    // WebSocket connection failed, retry after delay
                    delay(retryDelayMillis * (retryCount + 1))
                    retryCount++
                }
            }
            // Exceeded max retry attempts
            // Handle error or notify user
        }
    }

    fun disconnect() {
        webSocketSession?.close()
    }
}

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.