OKhttpClient 連接池優化


剛開始使用的是這種方式連接請求:

for(int i = 0;i<= 100000000;i++){ 
    val request = Web3j.build(new HttpService(address)).ethGetBlockByNumber(defaultBlockParameter, true)
}

跟蹤源碼發現HttpService中使用的是Okhttp的連接池,Build的初始化代碼如下:

也就是說,在每次創建一個新的httpService時,都創建一個數據庫連接池,導致服務端的連接被撐爆了。

 

 

 

 

經過優化后使用如下方式,將復用ConnectionPool:

val connectionPool:ConnectionPool = new ConnectionPool(1500,5L, TimeUnit.MINUTES)
for(int i = 0;i<= 100000000;i++){     
val httpService = new HttpService(address,getHttpClient(connectionPool),false) val request = Web3j.build(httpService).ethGetBlockByNumber(defaultBlockParameter, true)

    //業務代碼

}

//復用連接池
private def getHttpClient(pool:ConnectionPool):OkHttpClient = {
new OkHttpClient().newBuilder().connectionPool(pool).build()
}

 

參考:https://www.cnblogs.com/greyzeng/p/14148675.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM