<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linkd-V2 on PlumePHP</title><link>https://plumephp.com/tags/linkd-v2/</link><description>Recent content in Linkd-V2 on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Wed, 28 Oct 2026 18:19:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/tags/linkd-v2/index.xml" rel="self" type="application/rss+xml"/><item><title>《Netty 高性能网络编程》15.3 linkd-v2 验收与复盘</title><link>https://plumephp.com/java-netty-15-3-v2-acceptance/</link><pubDate>Wed, 28 Oct 2026 18:19:00 +0800</pubDate><guid>https://plumephp.com/java-netty-15-3-v2-acceptance/</guid><description>验收不是再跑一遍健康检查。本节把 linkd-v2 的验收拆成功能与协议一致性清单、五类故障注入、优雅关闭、指标与日志四块，每项给出可复制命令、预期与证据；再对比卷一手写 linkd v1 与 Netty 版 linkd-v2 的差异和代价，并给出带「验收缺口」的复盘模板。</description></item><item><title>《Netty 高性能网络编程》15.2 限流、超时与降级</title><link>https://plumephp.com/java-netty-15-2-resilience/</link><pubDate>Wed, 28 Oct 2026 18:18:00 +0800</pubDate><guid>https://plumephp.com/java-netty-15-2-resilience/</guid><description>15.1 的网关能转发，但下游变慢时会拖垮自己。本节用纯 JDK 给 linkd-v2 补三层保护：每 IP 与每连接的令牌桶限流返回 429 与 Retry-After，连接、读与总预算分层超时，连续失败打开、半开探测的熔断返回 503，并给出内存上限、清理策略与压测验证命令。</description></item><item><title>《Netty 高性能网络编程》15.1 网关路由与转发</title><link>https://plumephp.com/java-netty-15-1-gateway-routing/</link><pubDate>Wed, 28 Oct 2026 18:17:00 +0800</pubDate><guid>https://plumephp.com/java-netty-15-1-gateway-routing/</guid><description>3.3 的 GatewayHandler 把转发交给虚拟线程，本节把它收回 EventLoop：用路由表把 9090 的 /books/{id} 重写到 libraryd 8080，过滤 Hop-by-hop 头，基于 Bootstrap、HttpClientCodec 与 HttpObjectAggregator 做异步转发，讲清连接复用、超时与 502/504 的判据。</description></item><item><title>《Netty 高性能网络编程》14.3 调优案例与回归</title><link>https://plumephp.com/java-netty-14-3-tuning-case/</link><pubDate>Wed, 28 Oct 2026 18:16:00 +0800</pubDate><guid>https://plumephp.com/java-netty-14-3-tuning-case/</guid><description>一个可复现的 linkd-v2 调优案例：100 条 9093 连接、8 KiB 负载，worker=1 时单条 EventLoop 接近满核，p50 12 ms、p99 33 ms。用 jcmd 线程栈、JFR ExecutionSample 与 GC 停顿排除法定位，只把 worker 从 1 改成 4，给出前后对比表与回归清单，所有数字标注单次运行、未做统计。</description></item><item><title>《Netty 高性能网络编程》14.2 压测工具与指标口径</title><link>https://plumephp.com/java-netty-14-2-load-testing/</link><pubDate>Wed, 28 Oct 2026 18:15:00 +0800</pubDate><guid>https://plumephp.com/java-netty-14-2-load-testing/</guid><description>ab 能打 HTTP/1.1，wrk 和 hey 本机没装；9093 的自定义帧协议要用 Java 客户端压。本节给出可复制的 ab 命令、虚拟线程 FrameLoadClient、吞吐与 p50/p95/p99 口径、Little 定律、coordinated omission、预热与多轮方法，以及结果记录模板，所有数字都标注单次运行、未做统计。</description></item><item><title>《Netty 高性能网络编程》14.1 参数基线：水位、缓冲区、线程数</title><link>https://plumephp.com/java-netty-14-1-tuning-baseline/</link><pubDate>Wed, 28 Oct 2026 18:14:00 +0800</pubDate><guid>https://plumephp.com/java-netty-14-1-tuning-baseline/</guid><description>调优前先固定一组能复现的起点：boss=1、worker 显式 4、backlog 1024、TCP_NODELAY、32/128 KiB 水位、PooledByteBufAllocator 与 AUTO_READ=true。本节用 BaselineProbe 打印 linkd-v2 的真实配置，说明每个值的作用、验证方式和该改的信号，强调基线不是最优值。</description></item><item><title>《Netty 高性能网络编程》13.3 线程栈、JFR 与连接诊断</title><link>https://plumephp.com/java-netty-13-3-diagnostics/</link><pubDate>Wed, 28 Oct 2026 18:13:00 +0800</pubDate><guid>https://plumephp.com/java-netty-13-3-diagnostics/</guid><description>把 linkd-v2 变慢后的排查顺序固定为连接、线程、内存、JFR 四步，给出 lsof、netstat、jcmd Thread.print、GC.heap_info 与 JFR 的真实输出和判读方法，并说明 JFR 记录不到正在阻塞的线程这一边界。</description></item><item><title>《Netty 高性能网络编程》13.2 堆外内存与 PoolArena 指标</title><link>https://plumephp.com/java-netty-13-2-pool-metrics/</link><pubDate>Wed, 28 Oct 2026 18:12:00 +0800</pubDate><guid>https://plumephp.com/java-netty-13-2-pool-metrics/</guid><description>拆开 JVM 的 MaxDirectMemorySize 与 Netty 的 io.netty.maxDirectMemory 两层限制，用 metric() 读直接内存、arena 与线程缓存，实测上限如何压缩 arena 数量，并给出 linkd-v2 的阈值告警。</description></item><item><title>《Netty 高性能网络编程》13.1 ResourceLeakDetector</title><link>https://plumephp.com/java-netty-13-1-leak-detector/</link><pubDate>Wed, 28 Oct 2026 18:11:00 +0800</pubDate><guid>https://plumephp.com/java-netty-13-1-leak-detector/</guid><description>把 ResourceLeakDetector 的四档级别、property 与 setLevel 的覆盖关系讲清楚，用一个故意不 release 的最小程序跑出 PARANOID 报告，逐段读创建栈与最近访问栈，并给出 linkd-v2 的限时开启与回退步骤。</description></item><item><title>《Netty 高性能网络编程》附录 B Netty 诊断与调优命令</title><link>https://plumephp.com/java-netty-appendix-b-diagnostics/</link><pubDate>Wed, 28 Oct 2026 18:10:00 +0800</pubDate><guid>https://plumephp.com/java-netty-appendix-b-diagnostics/</guid><description>整理 macOS 上排查 linkd-v2 的可用命令：lsof、netstat、tcpdump、jcmd、jstack、JFR 与 Netty 系统属性，每条给出用途、可复制命令、输出读法与风险提示，并给出从连接积压到堆外内存上涨的组合排查路径。</description></item><item><title>《Netty 高性能网络编程》附录 A Netty 常用 API 速查</title><link>https://plumephp.com/java-netty-appendix-a-api/</link><pubDate>Wed, 28 Oct 2026 18:09:00 +0800</pubDate><guid>https://plumephp.com/java-netty-appendix-a-api/</guid><description>按 Bootstrap、Channel、EventLoop、Pipeline、ByteBuf、编解码、HTTP、WebSocket、HTTP/2 与连接池十组，列出 Netty 4.2 常用类、正确包名、方法签名与对应章节，并标出容易记错的常量与重载差异，供写 linkd-v2 时直接查表。</description></item><item><title>《Netty 高性能网络编程》12.3 Epoll 在 Linux 的配置</title><link>https://plumephp.com/java-netty-12-3-epoll-linux/</link><pubDate>Wed, 28 Oct 2026 18:08:00 +0800</pubDate><guid>https://plumephp.com/java-netty-12-3-epoll-linux/</guid><description>本节只写 Linux 部署侧：EpollEventLoopGroup 与 EpollServerSocketChannel 的配置、SO_REUSEPORT 与 TCP_FASTOPEN 的内核前提、classifier 与 glibc 兼容性，以及 Epoll.isAvailable() 为 false 时的回退。全部为部署说明，不是本机实测。</description></item><item><title>《Netty 高性能网络编程》12.2 KQueue 在 macOS 的实测</title><link>https://plumephp.com/java-netty-12-2-kqueue-macos/</link><pubDate>Wed, 28 Oct 2026 18:07:00 +0800</pubDate><guid>https://plumephp.com/java-netty-12-2-kqueue-macos/</guid><description>isAvailable() 为 true 不等于 server 真的跑在 kqueue 上。本节用本机探针打印 serverChannel 与 eventLoop 的实际类名，给出 KQueueEventLoopGroup 启动代码、Apple Silicon classifier，并处理 JDK 25 对 System.loadLibrary 的受限方法警告。</description></item><item><title>《Netty 高性能网络编程》12.1 原生传输与平台差异</title><link>https://plumephp.com/java-netty-12-1-native-transport/</link><pubDate>Wed, 28 Oct 2026 18:06:00 +0800</pubDate><guid>https://plumephp.com/java-netty-12-1-native-transport/</guid><description>NIO、Epoll、KQueue 三套 transport 不是三个开关，而是同一组接口的三份实现。本节讲清 Epoll.isAvailable() 与 KQueue.isAvailable() 的探测、classifier 构件选择、NativeEventLoops 的回退顺序，以及原生传输为什么不保证更快。</description></item><item><title>《Netty 高性能网络编程》11.3 gRPC on Netty 的结构</title><link>https://plumephp.com/java-netty-11-3-grpc-netty/</link><pubDate>Wed, 28 Oct 2026 18:05:00 +0800</pubDate><guid>https://plumephp.com/java-netty-11-3-grpc-netty/</guid><description>gRPC 不是又一个网络框架，而是 HTTP/2、protobuf 与生成代码的组合。本节用 linkd-v2 的 9092 端口拆开这三层，给出 pom 依赖、linkd.proto、LinkdServiceImpl 与 NettyServerBuilder 服务端、NettyChannelBuilder 客户端和 deadline，并说明 shaded Netty 的版本隔离边界。</description></item><item><title>《Netty 高性能网络编程》11.2 HTTP/2 服务端与流生命周期</title><link>https://plumephp.com/java-netty-11-2-http2-server/</link><pubDate>Wed, 28 Oct 2026 18:04:00 +0800</pubDate><guid>https://plumephp.com/java-netty-11-2-http2-server/</guid><description>把 11.1 的 pipeline 变成 9091 上可运行的 h2c 服务端。本节给出 ServerBootstrap、Http2FrameCodec、Http2MultiplexHandler 与子 channel 的完整装配，讲 HEADERS/DATA 如何创建和关闭 stream、GOAWAY 与流量控制窗口怎么处理，并用 curl --http2-prior-knowledge 验证。</description></item><item><title>《Netty 高性能网络编程》11.1 Http2FrameCodec 与多路复用</title><link>https://plumephp.com/java-netty-11-1-http2-codec/</link><pubDate>Wed, 28 Oct 2026 18:03:00 +0800</pubDate><guid>https://plumephp.com/java-netty-11-1-http2-codec/</guid><description>HTTP/2 帧分连接级与 stream 级两层。本节用 linkd-v2 的 9091 端口拆开 Http2FrameCodec 与 Http2MultiplexHandler 的分工，说明 preface、SETTINGS、HEADERS、DATA、WINDOW_UPDATE、GOAWAY 归谁处理，对比 h2c prior-knowledge 与 ALPN，并给出多路复用与连接池的取舍。</description></item><item><title>《Netty 高性能网络编程》10.3 会话表、心跳与广播</title><link>https://plumephp.com/java-netty-10-3-session-broadcast/</link><pubDate>Wed, 28 Oct 2026 18:02:00 +0800</pubDate><guid>https://plumephp.com/java-netty-10-3-session-broadcast/</guid><description>连接多了以后，回显要变成广播。本节用 ChannelGroup 管理会话，用 AttributeKey 绑定 userId，用 IdleStateHandler 加 ping/pong 清理死连接，给出 /ws/broadcast 的完整 WebSocketHub，并说明慢客户端过滤、广播风暴与按房间分组的扩展边界。</description></item><item><title>《Netty 高性能网络编程》10.2 帧处理、分片与聚合</title><link>https://plumephp.com/java-netty-10-2-websocket-frames/</link><pubDate>Wed, 28 Oct 2026 18:01:00 +0800</pubDate><guid>https://plumephp.com/java-netty-10-2-websocket-frames/</guid><description>升级之后，入站的都是 WebSocketFrame。本节分清文本、二进制、ping、pong、close 五类帧在 WebSocketServerProtocolHandler 里的去向，讲 continuation 分片与 WebSocketFrameAggregator 的位置和上限，给出 /ws/echo 的文本与二进制回显代码，以及大帧带来的内存与背压问题。</description></item><item><title>《Netty 高性能网络编程》10.1 WebSocketServerProtocolHandler</title><link>https://plumephp.com/java-netty-10-1-websocket-handler/</link><pubDate>Wed, 28 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/java-netty-10-1-websocket-handler/</guid><description>WebSocket 仍以 HTTP/1.1 Upgrade 开始。本节按 HttpServerCodec、HttpObjectAggregator、WebSocketServerProtocolHandler 的顺序装配 9090 端口，讲路径匹配、握手完成事件与 400 失败分支，并给出可运行的 WebSocketServer 与 curl 验证命令。</description></item><item><title>《Netty 高性能网络编程》9.3 读背压与 AUTO_READ</title><link>https://plumephp.com/java-netty-09-3-read-backpressure/</link><pubDate>Wed, 28 Oct 2026 17:59:00 +0800</pubDate><guid>https://plumephp.com/java-netty-09-3-read-backpressure/</guid><description>AUTO_READ 默认开启时，Netty 读完一轮就自动继续读，业务队列满也不会停。本节用本机输出验证手动 read() 的一轮边界，讲清 channelReadComplete 的恢复时机、慢消费者队列上限与 RCVBUF_ALLOCATOR 的边界，并给出 linkd-v2 的 ReadBackpressureHandler 与流量整形取舍。</description></item><item><title>《Netty 高性能网络编程》9.2 写队列与可写事件</title><link>https://plumephp.com/java-netty-09-2-write-buffer/</link><pubDate>Wed, 28 Oct 2026 17:58:00 +0800</pubDate><guid>https://plumephp.com/java-netty-09-2-write-buffer/</guid><description>write() 与 writeAndFlush() 的差别不在名字，而在 ChannelFuture 什么时候完成。本节用本机输出验证入队与 flush 的分界，解释批量写后一次 flush 的收益、待写队列在不可写状态下继续增长的风险，并给出 linkd-v2 广播发布器的批量写与监听器重试、丢弃策略。</description></item><item><title>《Netty 高性能网络编程》9.1 Channel.isWritable 与高低水位</title><link>https://plumephp.com/java-netty-09-1-writability/</link><pubDate>Wed, 28 Oct 2026 17:57:00 +0800</pubDate><guid>https://plumephp.com/java-netty-09-1-writability/</guid><description>WriteBufferWaterMark 的两个参数到底在统计什么？本节用 linkd-v2 的 WritabilityPump 拆开 Channel.isWritable 的判定、channelWritabilityChanged 的触发与 4.2 默认的 32/64 KiB 水位，给出生产者暂停与恢复的完整 handler，并用本机输出核对 config 打印值与状态迁移。</description></item><item><title>《Netty 高性能网络编程》8.3 关闭、半关闭与连接回收</title><link>https://plumephp.com/java-netty-08-3-close-semantics/</link><pubDate>Wed, 28 Oct 2026 17:56:00 +0800</pubDate><guid>https://plumephp.com/java-netty-08-3-close-semantics/</guid><description>关闭一条连接有 close、disconnect、shutdownOutput 三种语义，半关闭处理错会留下永远不释放的连接。本节说明 ALLOW_HALF_CLOSURE 与 ChannelInputShutdownEvent 的配合，用 ChannelGroup 批量关闭，给出 linkd-v2 GracefulShutdown 的步骤与期限，以及 SO_LINGER 触发 RST 的边界。</description></item><item><title>《Netty 高性能网络编程》8.2 连接池与多路复用</title><link>https://plumephp.com/java-netty-08-2-connection-pool/</link><pubDate>Wed, 28 Oct 2026 17:55:00 +0800</pubDate><guid>https://plumephp.com/java-netty-08-2-connection-pool/</guid><description>连接池的关键不是池化本身，而是何时借、何时还、何时判定连接已坏。本节拆开 FixedChannelPool 的三个生命周期回调，配合 ChannelHealthChecker 与获取超时，用 AbstractChannelPoolMap 按 host:port 建池，并用 Little 定律说明池大小以及 HTTP/1.1 与 HTTP/2 的取舍。</description></item><item><title>《Netty 高性能网络编程》8.1 客户端连接与重连</title><link>https://plumephp.com/java-netty-08-1-client-reconnect/</link><pubDate>Wed, 28 Oct 2026 17:54:00 +0800</pubDate><guid>https://plumephp.com/java-netty-08-1-client-reconnect/</guid><description>客户端重连的难点不在 connect 调用，而在失败路径、触发时机与退避节奏。本节拆开 Bootstrap.connect 的拒绝、超时与握手失败三种结果，用 closeFuture 触发重连，给出 linkd-v2 ReconnectHandler 的状态机、指数退避、0.8 到 1.2 抖动、排队上限与惊群规避。</description></item><item><title>《Netty 高性能网络编程》7.3 握手、认证与连接绑定</title><link>https://plumephp.com/java-netty-07-3-handshake-auth/</link><pubDate>Wed, 28 Oct 2026 17:53:00 +0800</pubDate><guid>https://plumephp.com/java-netty-07-3-handshake-auth/</guid><description>9093 上任何能连上的客户端都能发 REQUEST。本节用 HELLO/token 三态握手把未认证连接挡在业务 handler 之前：AttributeKey 与 Channel 绑定、MessageDigest.isEqual 比较 token、10 秒认证超时、失败即 ERROR 加 close。</description></item><item><title>《Netty 高性能网络编程》7.2 IdleStateHandler 与心跳</title><link>https://plumephp.com/java-netty-07-2-idle-heartbeat/</link><pubDate>Wed, 28 Oct 2026 17:52:00 +0800</pubDate><guid>https://plumephp.com/java-netty-07-2-idle-heartbeat/</guid><description>连接空闲时双方都不知道对端是否还活着。本节拆开 IdleStateHandler 的三种空闲与 IdleStateEvent.state()，给出服务端 30 秒发 PING、客户端回 PONG、连续两轮无响应关闭的完整 handler，并说明心跳为什么替代不了业务超时。</description></item><item><title>《Netty 高性能网络编程》7.1 协议帧设计与魔数</title><link>https://plumephp.com/java-netty-07-1-protocol-frame/</link><pubDate>Wed, 28 Oct 2026 17:51:00 +0800</pubDate><guid>https://plumephp.com/java-netty-07-1-protocol-frame/</guid><description>16 字节头里的每个字段都有代价。本节讲清 magic 为什么不是安全措施、version 怎么兼容、type 与 flags 留了多少扩展位、requestId 的无符号语义和 1 MiB 上限，并给出 LinkdFrame 与两个编解码器的完整实现。</description></item><item><title>《Netty 高性能网络编程》6.3 编解码错误与异常传播</title><link>https://plumephp.com/java-netty-06-3-codec-errors/</link><pubDate>Wed, 28 Oct 2026 17:50:00 +0800</pubDate><guid>https://plumephp.com/java-netty-06-3-codec-errors/</guid><description>解码失败不是一句 catch 就能收尾。本节讲 DecoderException、TooLongFrameException、CorruptedFrameException 在 pipeline 里的传播路径，给出 linkd-v2 的 ERROR 帧与关闭策略、HTTP decoderResult 的 400 处理，并说明 exceptionCaught 吞掉异常后连接为什么会半死。</description></item><item><title>《Netty 高性能网络编程》6.2 长度域、分隔符与定长解码</title><link>https://plumephp.com/java-netty-06-2-frame-decoder/</link><pubDate>Wed, 28 Oct 2026 17:49:00 +0800</pubDate><guid>https://plumephp.com/java-netty-06-2-frame-decoder/</guid><description>LengthFieldBasedFrameDecoder 的五个参数最容易配错。本节用三组真实字节序列算清 lengthFieldOffset、lengthFieldLength、lengthAdjustment 与 initialBytesToStrip，给出 linkd-v2 十六字节头 strip 16 的配置，并对比 LengthFieldPrepender、分隔符与定长解码器。</description></item><item><title>《Netty 高性能网络编程》6.1 ByteToMessageDecoder</title><link>https://plumephp.com/java-netty-06-1-bytetomessage/</link><pubDate>Wed, 28 Oct 2026 17:48:00 +0800</pubDate><guid>https://plumephp.com/java-netty-06-1-bytetomessage/</guid><description>粘包拆包都从 ByteToMessageDecoder 开始。本节拆开它的 cumulation 缓冲、callDecode 循环、decodeLast 与 isSingleDecode，给出可运行的行解码器和 linkd-v2 帧解码器，并说明 decode 里 release 入参、读不够却推进 readerIndex、以及用累积缓冲承载超大帧会付出什么代价。</description></item><item><title>《Netty 高性能网络编程》5.3 PooledByteBufAllocator 与 Arena</title><link>https://plumephp.com/java-netty-05-3-pooled-allocator/</link><pubDate>Wed, 28 Oct 2026 17:47:00 +0800</pubDate><guid>https://plumephp.com/java-netty-05-3-pooled-allocator/</guid><description>拆开 PooledByteBufAllocator 的 arena、thread cache、chunk、page 结构，用 metric() 读出 arena 分配数与线程缓存命中，验证 4.2 里 ByteBufAllocator.DEFAULT 的真实类型，并给出 linkd-v2 的分配器配置与指标打印代码。</description></item><item><title>《Netty 高性能网络编程》5.2 引用计数与泄漏</title><link>https://plumephp.com/java-netty-05-2-reference-counting/</link><pubDate>Wed, 28 Oct 2026 17:46:00 +0800</pubDate><guid>https://plumephp.com/java-netty-05-2-reference-counting/</guid><description>从 readRetainedSlice 的释放责任讲起，给出 retain/release 的所有权规则，说明 SimpleChannelInboundHandler 与 ByteToMessageDecoder 的释放边界，用一个静态 Map 反例复现 LEAK 日志，并整理 paranoid 级别的排查步骤与 ReferenceCountUtil 的使用范围。</description></item><item><title>《Netty 高性能网络编程》5.1 ByteBuf 索引与视图</title><link>https://plumephp.com/java-netty-05-1-bytebuf-indices/</link><pubDate>Wed, 28 Oct 2026 17:45:00 +0800</pubDate><guid>https://plumephp.com/java-netty-05-1-bytebuf-indices/</guid><description>用 Unpooled.buffer 把 readerIndex、writerIndex、capacity、maxCapacity 的每次变化跑成表，对照 JDK ByteBuffer 的 position 与 limit，讲清 readableBytes 为什么不能当消息长度，以及 slice、duplicate、retainedSlice 谁共享内容、谁增加引用计数。</description></item><item><title>《Netty 高性能网络编程》4.3 Handler 共享与线程安全</title><link>https://plumephp.com/java-netty-04-3-handler-sharing/</link><pubDate>Wed, 28 Oct 2026 17:44:00 +0800</pubDate><guid>https://plumephp.com/java-netty-04-3-handler-sharing/</guid><description>本节用 linkd-v2 的 HandshakeHandler 说明哪些字段让 handler 变成有状态，@Sharable 在添加时检查什么，共享实例会带来哪些并发与串状态风险，并给出 AttributeKey、ChannelGroup 与不可变 LinkdFrame 的正确用法，以及 DefaultEventExecutorGroup 的能力边界。</description></item><item><title>《Netty 高性能网络编程》4.2 Handler 生命周期与状态</title><link>https://plumephp.com/java-netty-04-2-handler-lifecycle/</link><pubDate>Wed, 28 Oct 2026 17:43:00 +0800</pubDate><guid>https://plumephp.com/java-netty-04-2-handler-lifecycle/</guid><description>本节按时间顺序拆开 handlerAdded、channelRegistered、channelActive、channelRead、channelReadComplete、channelInactive 与 handlerRemoved，说明 ChannelInitializer 如何移除自己，并用 HandshakeHandler 演示每连接状态迁移。</description></item><item><title>《Netty 高性能网络编程》4.1 Pipeline 结构与事件传播</title><link>https://plumephp.com/java-netty-04-1-pipeline/</link><pubDate>Wed, 28 Oct 2026 17:42:00 +0800</pubDate><guid>https://plumephp.com/java-netty-04-1-pipeline/</guid><description>本节拆开 linkd-v2 的两条 pipeline：head/tail 哨兵、入站与出站方向、addLast 顺序为何决定 HttpServerCodec、HttpObjectAggregator 与业务 handler 的先后，以及 ctx.writeAndFlush() 与 channel().writeAndFlush() 的起点差异。</description></item><item><title>《Netty 高性能网络编程》3.3 阻塞隔离与虚拟线程</title><link>https://plumephp.com/java-netty-03-3-blocking-isolation/</link><pubDate>Wed, 28 Oct 2026 17:41:00 +0800</pubDate><guid>https://plumephp.com/java-netty-03-3-blocking-isolation/</guid><description>本节解释为什么 JDBC、文件 IO 和同步 HTTP 不能放在 EventLoop 上，并用本机输出对比三种隔离：DefaultEventExecutorGroup、独立线程池、JDK 25 虚拟线程。给出 GatewayHandler 把转发任务提交到虚拟线程再回写 Channel 的完整代码，以及虚拟线程在 CPU 密集和下游容量上的边界。</description></item><item><title>《Netty 高性能网络编程》3.2 任务队列与定时任务</title><link>https://plumephp.com/java-netty-03-2-tasks-schedule/</link><pubDate>Wed, 28 Oct 2026 17:40:00 +0800</pubDate><guid>https://plumephp.com/java-netty-03-2-tasks-schedule/</guid><description>本节把 EventLoop 当作单线程调度器来用：execute、schedule、scheduleAtFixedRate 的提交与执行顺序，ChannelFuture 回调里如何安排重连退避，GlobalEventExecutor 与 DefaultEventExecutorGroup 各自适合什么，以及心跳任务写成定时器后为什么会静默停止。给出阻塞任务推迟定时器的本机输出。</description></item><item><title>《Netty 高性能网络编程》3.1 EventLoopGroup 与线程归属</title><link>https://plumephp.com/java-netty-03-1-eventloop-group/</link><pubDate>Wed, 28 Oct 2026 17:39:00 +0800</pubDate><guid>https://plumephp.com/java-netty-03-1-eventloop-group/</guid><description>本节回答 linkd-v2 上线前的三个问题：boss 与 worker 各开多少线程、一个 Channel 为什么终身只属于一个 EventLoop、group.next() 如何分配连接。用探针打印 channel.eventLoop() 与线程名，给出 10 核机器的真实分配、io.netty.eventLoopThreads 的效果，以及多连接共享 EventLoop 的延迟代价。</description></item><item><title>《Netty 高性能网络编程》2.3 ChannelOption 与 Socket 参数</title><link>https://plumephp.com/java-netty-02-3-channel-options/</link><pubDate>Wed, 28 Oct 2026 17:38:00 +0800</pubDate><guid>https://plumephp.com/java-netty-02-3-channel-options/</guid><description>ChannelOption 是强类型常量，作用在监听或连接 channel 上。本节拆开 SO_BACKLOG、TCP_NODELAY、SO_KEEPALIVE、CONNECT_TIMEOUT_MILLIS、ALLOCATOR、RCVBUF_ALLOCATOR、WRITE_BUFFER_WATER_MARK 与 AUTO_READ，给出 linkd-v2 参数表和打印 config 的方法。</description></item><item><title>《Netty 高性能网络编程》2.2 Channel 生命周期与 ChannelFuture</title><link>https://plumephp.com/java-netty-02-2-channel-lifecycle/</link><pubDate>Wed, 28 Oct 2026 17:37:00 +0800</pubDate><guid>https://plumephp.com/java-netty-02-2-channel-lifecycle/</guid><description>Channel 从注册到注销经历 registered、active、read、inactive、unregistered 五个阶段，ChannelFuture 串起异步结果与监听器。用 linkd-v2 LifecycleLoggingHandler 与 RegistryHandler 演示事件顺序、closeFuture 关闭、CLOSE 监听器和连接失败处理，说明 sync() 死锁边界。</description></item><item><title>《Netty 高性能网络编程》2.1 ServerBootstrap 与 Bootstrap</title><link>https://plumephp.com/java-netty-02-1-bootstrap/</link><pubDate>Wed, 28 Oct 2026 17:36:00 +0800</pubDate><guid>https://plumephp.com/java-netty-02-1-bootstrap/</guid><description>ServerBootstrap 与 Bootstrap 是两条启动路径：一条接受连接，一条发起连接。拆开 group、childHandler、option、childOption、bind 与 connect 的分工，说明 boss/worker 职责和 ChannelInitializer 每连接执行一次的语义，给出 linkd-v2 LinkdServer 启动与 sync() 线程边界。</description></item><item><title>《Netty 高性能网络编程》1.3 linkd-v2 工程与依赖</title><link>https://plumephp.com/java-netty-01-3-project-setup/</link><pubDate>Wed, 28 Oct 2026 17:35:00 +0800</pubDate><guid>https://plumephp.com/java-netty-01-3-project-setup/</guid><description>本节搭 linkd-v2 四模块 Maven 工程：父 POM 固定 netty.version=4.2.19.Final 与 maven.compiler.release=25，模块保持单向依赖，入口 LinkdV2Main 用 System.Logger 打印协议常量，并给出 mvn -q -DskipTests package 的构建结果与 netty-all 聚合 POM 的验证方法。</description></item><item><title>《Netty 高性能网络编程》1.2 从 Reactor 到 Netty 组件映射</title><link>https://plumephp.com/java-netty-01-2-reactor-mapping/</link><pubDate>Wed, 28 Oct 2026 17:34:00 +0800</pubDate><guid>https://plumephp.com/java-netty-01-2-reactor-mapping/</guid><description>本节把卷一 linkd 的 EventLoop、Connection、Handler、BufferPool、FrameDecoder 逐个映射到 Netty 的 EventLoopGroup、Channel、Pipeline、ByteBufAllocator、ByteToMessageDecoder，用对照表和最小 Echo 说明哪些手写逻辑被 Netty 接管，哪些责任仍留在业务代码里。</description></item><item><title>《Netty 高性能网络编程》1.1 Netty 在网络栈中的位置</title><link>https://plumephp.com/java-netty-01-1-position/</link><pubDate>Wed, 28 Oct 2026 17:33:00 +0800</pubDate><guid>https://plumephp.com/java-netty-01-1-position/</guid><description>本节把 Netty 放回一次真实请求的路径里：从 JDK NIO 的 Selector 到 HTTP 协议处理，说明它封装了事件分发、半包与写队列，没封装路由、认证和业务语义；并对比 Tomcat、Jetty、OkHttp 的层次差异，给出 linkd-v2 的四模块划分与 9090 到 9093 的端口分工。</description></item><item><title>《Netty 高性能网络编程》目录与学习路径</title><link>https://plumephp.com/java-netty-toc/</link><pubDate>Wed, 28 Oct 2026 17:32:00 +0800</pubDate><guid>https://plumephp.com/java-netty-toc/</guid><description>《Netty 高性能网络编程》全书导航：给出协议实现、性能排查、生产网关三条学习路径，十五章分组表与每章首节入口，linkd-v2 四个模块的推进与验收状态，以及 50 篇的阅读顺序、依赖关系、每组能力的自测检查点和附录入口，方便按目标跳读。</description></item><item><title>《Netty 高性能网络编程》前言：读法、环境与约定</title><link>https://plumephp.com/java-netty-preface/</link><pubDate>Wed, 28 Oct 2026 17:31:00 +0800</pubDate><guid>https://plumephp.com/java-netty-preface/</guid><description>交代本书的读者对象与前置知识，列出 Temurin 25.0.5+8、Maven 3.9.12、Netty 4.2.19.Final 的环境清单和 Apple M1 Pro 机器口径，说明 linkd-v2 的四道门禁、端口 9090/9091/9092/9093、代码与输出约定，以及每节内容的验证步骤和常见误解。</description></item><item><title>《Netty 高性能网络编程》序：为什么在 JDK NIO 之后还要学 Netty</title><link>https://plumephp.com/java-netty-foreword/</link><pubDate>Wed, 28 Oct 2026 17:30:00 +0800</pubDate><guid>https://plumephp.com/java-netty-foreword/</guid><description>从卷一手写 NIO 的 linkd 留下的四个缺口切入，说明为什么还要学 Netty：给出 EventLoop、Channel、Pipeline、ByteBuf 与手写结构的对应关系，交代三卷本定位、Netty 4.2.19.Final 与 JDK 25 的版本口径，以及全书主线 linkd-v2 的验收产出。</description></item></channel></rss>