簡體   English   中英

在Netty中以編程方式刷新頻道

[英]Flushing a channel programmatically in Netty

我有一個Netty應用程序,它使用HTTP連接並將間歇性數據流傳輸回去,同時保持連接打開直到客戶端關閉它。 我可以使該應用程序正常工作,除了發送緩沖區沒有足夠頻繁地推送到客戶端(並且經常在合並的寫事件中),這會導致另一端的數據接收不完整,直到下一個緩沖區被推送為止,這可能是很長的時間未來)。 我想知道是否有一種方法可以寫入發送緩沖區並強制刷新以將完整的數據塊推送到客戶端,而不必關閉套接字。

我已經看過了引導程序屬性tcpNoDelaywriteBufferHighWaterMarkwriteBufferLowWaterMark (全部帶有和不帶有“子代”。)無效。

有什么建議么? 謝謝!

以防萬一,Netty沒有flush()操作。 它只是盡快寫入。

我認為您可以向ChannelPipeline添加BufferedWriteHandler以便模擬緩沖的寫操作。

BufferedWriteHandler Web文檔

只要您可以維護或獲取對BufferedWriteHandler的管道化實例的引用,

public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
        BufferedWriteHandler bufferedWriter 
                = e.getChannel().getPipeline().get("buffer");

那么您可以根據需要以編程方式刷新:

bufferedWriter.flush();

我想我回答了我自己的問題,這並不是由於套接字緩沖區未發送數據。 我使用“ curl”來測試響應,並且curl具有內部緩沖區,該緩沖區阻止了數據被打印到屏幕上。 可以用“ -N”禁用。 完全是我自己的錯,但仍然花了一些時間來挖掘代碼並將其追溯到我的客戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM