Netty 4:高写和低写水印

 漫天星雨2000 发布于 2022-12-28 15:00

我正在使用Netty 4.我看到了Netty服务器的下列选项:WRITE_BUFFER_HIGH_WATER_MARK和WRITE_BUFFER_LOW_WATER_MARK.

官方页面相关文章链接到Norman Maurer的Ne​​tty最佳实践(带视频的幻灯片).幻灯片之一看起来像这样:

ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.childOption(ChannelOption.WRITE_BUFFER_HIGH_WATER_MARK, 32 * 1024);
bootstrap.childOption(ChannelOption.WRITE_BUFFER_LOW_WATER_MARK, 8 * 1024);   

并有这个前言:

设置理智的WRITE_BUFFER_HIGH_WATER_MARK和WRITE_BUFFER_LOW_WATER_MARK

但它是什么WRITE_BUFFER_HIGH_WATER_MARK和WRITE_BUFFER_LOW_WATER_MARK?以及如何让他们理智

我没有找到任何明确的信息.谢谢你的帮助.

1 个回答
  • 有关从水印的一些信息本文章:

    例如,假设您在服务器端有一个由客户端填充并由后端处理的任务队列.如果客户端发送任务太快,则队列长度会增加.人们需要引入如此命名的高水印和低水印.如果队列长度大于高水位停止从套接字读取并且队列长度将减少.当队列长度小于低水印时,再次从套接字开始读取任务.

    注意,为了使客户能够适应您处理任务的速度(实际上是为了调整窗口大小),不应该在高水位和低水位之间留下很大的差距.从另一方面来说,小间隙意味着您经常在事件循环中添加/删除套接字.

    对于Netty来说似乎是真的,因为这个 JavaDoc ChannelConfig说:

    如果写入缓冲区中排队的字节数超过writeBufferHighWaterMark值, Channel.isWritable()将开始返回false.

    对于低水印:

    一旦在写缓冲区中排队的字节数超过高水位线然后降低到该值以下,Channel.isWritable()将再次返回true.

    关于理智,我认为,这是相对的问题,这取决于您通过渠道发送的信息以及频率.对于必须为这些变量定义的值,没有严格的规则.所以,我认为,你必须在实践中找到自己的价值观.幻灯片向您展示了其中一个示例.

    2022-12-28 15:01 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有