Netty返回數據丟包的問題之一


這個問題是在一個群友做壓力測試的時候發現的。使用客戶端和netty創建一條連接,然后寫了一個for循環不停的給服務器發送1500條信息,發現返回只有幾百條。另外幾百條不知道哪去了。查看代碼,發現在服務器發送前做了一個判斷:


 

通過查看源碼,問題就在isWriteable()里面,下面看一下源碼,在AbstractChannel里面:


 

再看buf.isWritebale()的實現:


 

這里有一個變量,控制了是否可以寫,那這個變量什么時候發生變化呢,我們接着找,先看看是什么情況下被修改為非0的


 

這個方法是在這里被調用 的:


 

這個方法是用來接收發送數據的緩存的,從這里可以看出,當緩存的數據長庫大於channel.config.getWriteBufferHighWaterMark()的時候,就不能再寫了。這是一種限流 措施,防止數據寫入太大,導致消息堆積,內存不足的情況。

我們看到這個值是在channel config中配置的,那么就可以在channel config中修改這個值,

 ctx.channel().config().setWriteBufferHighWaterMark(1024*1024 * 8);

也可以在服務啟動的時候設置:


 給孩子的禮物:


 

 


 

 

歡迎加群交流,QQ群:66728073,197321069,398808948 還可以掃描博客左上角二維碼,關注游戲技術網公眾號

 


免責聲明!

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



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