2012-10-10 59 views
3

我開發了一個服務器應用程序,通過使用Netty將數據傳輸到客戶端。基本上,有一臺主服務器向我的應用程序提供數據,應用程序將數據分發給註冊用戶。由於我的應用程序需要長期維護,Netty 3.5.8和Netty 4.0.0在API方面有很大不同,因此我決定使用Netty 4.0.0防止Netty 4.0.0中的內存不足錯誤.Alpha

但是,我遇到了這樣的問題:當主服務器提供的數據太多時,無法足夠快地分發給客戶端。堆內存使用量增加並導致內存不足,所以我在嘗試在寫入數據之前檢查客戶端的緩衝區以防止出現此問題。我在網站(http://static.netty.io/4.0/xref/io/netty/example/discard/package-summary.html)中使用了丟棄示例,但它不起作用,因爲有時堆內存已滿在聽者被調用之前。我在Netty 3.5.8中查看這個例子,發現這個例子在寫入數據之前檢查實際的緩衝區。它與4.0.0中的例子不同。因此,我們是否有辦法在netty 4.0.0中寫入之前檢查緩衝區?

在此先感謝。

回答

0

我有類似的問題。我處理這個的方式是:

  1. 當服務器寫入數據時,寫入第64k字節的調用被同步調用。因此,呼叫被阻止,直到數據被另一端消耗。
  2. 另一端不消耗數據,直到它已經消耗的數據被處理並丟棄。

始終遵循相同的模式。它可能會減慢速度,但會防止內存不足錯誤。緩慢不應該擔憂,因爲如果擔心的話,您的應用程序體系結構(netty之外)中已經有了一個需要尋址的用例。