2016-05-14 107 views
2

爲了防止OOME在riemann服務器當客戶端不讀的ACK正常,我已經實現some logic當它成爲不可寫,關閉通道,在假設條件下,這是由客戶端引起了不讀/ ACKING數據包的速度不夠快。如何使用慢客戶端來節制netty服務器?

然而,這也將關閉發送大十歲上下的查詢結果,當信道,可能是因爲服務器嘗試寫更快的結果比它可以通過TCP發送。從我的頭頂開始,我認爲處理這種情況的最佳方法是使用WriteTimeoutHandler設置一些暫停寫入。

是否有網狀已知處理這種情況的一些標準模式?

+0

看起來像這個問題是相關的:http://stackoverflow.com/questions/28862613/throttling-websockets-with-netty-socketio-server – insitu

回答

1

基本上你會停止寫入一次Channel.isWritable()返回false,一旦再次回到真正的重新開始。您可以通過覆蓋ChannelInboundHandler.channelWritabilityChanged(...)來更新此通知。

+0

謝謝你的提議,這是我想到的東西,但這似乎很複雜在這種特殊情況下,我需要處理一些邏輯來知道哪些答案沒有寫入。有沒有辦法在輸出緩衝區中放棄響應?最後,我恐怕沒有實際的解決辦法來做我想做的事情...... – insitu

相關問題