Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Introduction

rs-netty 是一个 Tokio-native、Netty-inspired 的 Rust 网络框架。它保留了 Channel / Pipeline / Handler 这些熟悉的概念,但主路径建立在 Rust 类型系统、async/await、Tokio task、bounded channel queue 和普通 owned message 上。

当前 crate 根启用了 #![deny(unsafe_code)],公开入口主要是:

  • pipeline():构建 TCP stream pipeline。
  • datagram_pipeline():构建 UDP datagram pipeline。
  • TcpServer / TcpClient:运行 TCP server/client。
  • UdpServer / UdpClient:运行 UDP server/client。
  • Handler / DatagramHandler / Inbound / Business / Outbound:实现 pipeline stage。
  • Channel / DatagramChannel:从 handler 外部写入、flush 或关闭连接/Socket。
  • Life:可选 lifecycle hook。
  • #[handler]:为简单 handler 生成 TCP 和 UDP final handler impl。

Minimal TCP Server

这个例子贴近 examples/tcp_echo_server.rs

use rs_netty::{codec::LineCodec, handler, pipeline, Result, TcpServer};

#[tokio::main]
async fn main() -> Result<()> {
    TcpServer::bind("127.0.0.1:9000")
        .pipeline(|| {
            pipeline()
                .codec(LineCodec::new())
                .handler(Echo)
        })
        .run()
        .await
}

struct Echo;

#[handler(Echo)]
async fn echo(msg: String) -> Result<String> {
    Ok(msg)
}

LineCodec 把 TCP byte stream 解码成 StringEcho 收到 String,宏生成的 handler 会把返回的 String 通过 outbound side 写回并 flush。

Minimal UDP Server

这个例子贴近 examples/udp_echo_server.rs

use rs_netty::{codec::Utf8DatagramCodec, datagram_pipeline, handler, Result, UdpServer};

#[tokio::main]
async fn main() -> Result<()> {
    UdpServer::bind("127.0.0.1:9002")
        .pipeline(|| {
            datagram_pipeline()
                .codec(Utf8DatagramCodec)
                .handler(UdpEcho)
        })
        .run()
        .await
}

struct UdpEcho;

#[handler(UdpEcho)]
async fn udp_echo(msg: String) -> Result<String> {
    Ok(format!("echo: {msg}"))
}

UDP pipeline 处理的是一个个完整 datagram。DatagramContext::write 默认回复当前 datagram 的 sender;如果要写给其他 peer,使用 write_towrite_to_and_flush

How To Read This Guide

如果你想使用框架,先看 Typed PipelineTCPUDPHandlersCodecs。如果你要扩展框架,重点看 ArchitectureLifecycleChannel Write And FlushExtension GuideAPI Map