【发布时间】:2014-10-17 12:53:52
【问题描述】:
最近我正在尝试使用netty。我遇到了以下问题:
ctx.channel().write(new TextWebSocketFrame("hello")) 没有在客户端返回 hello,但 ctx.channel().writeAndFlush(new TextWebSocketFrame("hello")) 有。
两者有什么区别? ctx 是ChannelHandlerContext。
【问题讨论】:
-
一般来说,写入可能会在刷新之前缓冲一些数据。写入和刷新意味着将数据放入流而不缓冲它。当发送大量数据时,缓冲通常更快。
-
好吧,在我的情况下,只有“写”对发送数据没有帮助。
-
即使您使用 write(),您也需要始终刷新数据,然后在写入后您应该执行 ctx.channel().flush()。缓冲区中剩余的任何内容都将被刷新(发送)。
-
@Md.ArafatAlMahmud 数据通常会在以下情况下被刷新:1.您手动请求它(使用刷新方法),2.缓冲区达到其限制,因此要获取更多数据,需要先将其推出。当然这是基本的,一些复杂的实现可能会检查计算机是否处于空闲状态,因为它什么都不做,所以是刷新缓冲区的好时机。可能还有其他情况。