番石榴速率限制器不适用于Android

时间:2019-08-12 22:03:35

标签: android kotlin guava rate-limiting

我在Android应用上使用Guava的速率限制器来设置用户每秒可以发出的请求数量的限制。

我的代码:



class MyClient(private val main: Activity) {
    private val API = "https://827a2323.ngrok.io"

    //max 1 requests per second
    private val rateLimiter = RateLimiter.create(1.0)

    fun search(p: Parameters, callback: (Array<Thing>) -> Unit) {
        makeRequest("$API/search", p, callback)
    }

    fun random(callback: (Thing) -> Unit) {
        makeRequest("$API/random", mutableListOf(), callback)
    }


    private inline fun <reified T> makeRequest(url: String, p: Parameters, crossinline callback: (T) -> Unit) {
        rateLimiter.acquire()
        buildPath(url, p)
            .httpGet()
            .responseJson { _, _, result ->
                when (result) {
                    is Result.Failure -> {
                        main.runOnUiThread {
                            Toast.makeText(
                                main,
                                "Request Failed! " + result.error,
                                Toast.LENGTH_LONG
                            ).show()
                        }
                    }
                    is Result.Success -> {
                        val json = result.get().obj()
                        Log.i("json", json.toString())
                        val res = deserialize<T>(json.get("results").toString())
                        main.runOnUiThread { callback(res) }
                    }
                }
            }
    }
}

我尝试向我的应用发送垃圾邮件,但我收到Fuel(我用来发出请求的library)的错误提示,说我发出了太多请求。

我的期望是acquire呼叫将阻止垃圾邮件传入的请求-仅此而已。这些垃圾邮件请求均不应执行

但这并没有完全发生,因为我从加油中得到了一个错误。

我该怎么做才能缓解这个问题?

0 个答案:

没有答案