Websocket Netty channel().read()在当前不存在任何数据的通道上

Websocket Netty channel().read()在当前不存在任何数据的通道上,websocket,netty,Websocket,Netty,我试图找出如何在netty中实现背压,我发现autoread=true和使用explicitctx.channel().read()可能有效,但我不确定它是如何工作的,也无法找到更多细节 具体来说,我想知道如果调用read()会发生什么。是netty试图从底层通道(比如websocket连接)读取的语义吗?如果没有准备好读取的数据怎么办?在不读取任何数据的情况下,读取是否成功?或者我可以保证,如果我调用read一次,它会一直尝试读取,直到有一些数据可用 谢谢read()基本上只要告诉频道在有东西

我试图找出如何在netty中实现背压,我发现
autoread=true
和使用explicit
ctx.channel().read()
可能有效,但我不确定它是如何工作的,也无法找到更多细节

具体来说,我想知道如果调用
read()
会发生什么。是netty试图从底层通道(比如websocket连接)读取的语义吗?如果没有准备好读取的数据怎么办?在不读取任何数据的情况下,读取是否成功?或者我可以保证,如果我调用read一次,它会一直尝试读取,直到有一些数据可用


谢谢

read()
基本上只要告诉
频道
在有东西准备好时读取下一块数据,这意味着直接读取或稍后读取。所以,是的,你可以保证如果你调用
read()
它会在某个时候读取。

也许可以澄清一下——调用
read()
有什么影响吗?或者它是幂等的,这意味着它实际上不满足,它只会触发下一次单次读取,而不管调用多少次
read()
Yes就是这样。。。至少如果我们谈论频道本身。也就是说,如果您的管道中有一个
ChannelOutboundHandler
,它可能会在这里重新运行。是的,我在考虑通道——用例是为通道实现反压力(在我的应用程序准备好处理它之前,不要从套接字/内核读取更多数据),无论您调用read()的频率有多高……非常感谢!如果你愿意的话,也许还有一个问题。。。这可能对
WebsocketFrameAggregator
之类的东西不太管用,对吧?其思想是:管道包含:-
websocketServerHandler
-
websocketAggregatorHandler
-
myHandler
,在处理完整帧后,我在我的处理程序中调用
read()
,它只会触发一个
read()
调用。。。所以在我看来,这可能会读取第一个websocket帧,但如果它不是最终帧,聚合器将在内部存储它,并且不会触发
myHandler
,因此不会发生其他
read()
,分析正确吗