【问题标题】:Implementing "group flush" in server-side Netty handler在服务器端 Netty 处理程序中实现“组刷新”
【发布时间】:2014-12-16 05:54:38
【问题描述】:

我在 Netty 中实现了一个运行良好的服务器,但现在我正在尝试优化一个方面。

传入通道是多路复用的,即每个客户端进程都有许多线程通过与服务器的单个连接发送请求和读取响应。

服务器处理程序 channelRead() 依次接收每个请求,并将其分派到线程池执行。执行将导致将响应写入通道。

目前,每个响应都会使用 ctx.writeAndFlush() 立即刷新。我正在 Netty 中寻找一种可以优化的设计模式,以便如果多个线程同时将消息写入同一个通道,我可以在一次刷新(即组刷新)中将多条消息批处理在一起,以减少系统调用的数量。

如果有任何关于实现这种 Netty 风格的建议,我将不胜感激。

谢谢,

安迪。

【问题讨论】:

    标签: netty


    【解决方案1】:

    只需使用 ctx.write(...) 并在编写足够多的内容后调用 ctx.flush()。这将尝试对迄今为止编写的所有内容进行收集写入。所以只有一个系统调用。

    【讨论】:

    • 看来ctx.flush还是一一发送msg?那为什么要一个系统调用?
    • ctx.write:将 mgs 添加到缓冲区。 ctx.flush() 一个一个发送消息
    • 我再次检查代码,它将消息合并到一个系统调用中,所以你写了,
    猜你喜欢
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2019-11-26
    • 2018-11-03
    相关资源
    最近更新 更多