Rust中使用tokio库处理并发请求的具体代码示例

以下是一个使用 tokio 库处理并发请求的示例代码,假设我们要实现一个简单的 HTTP 服务器,能够同时处理多个请求:

 

rust格式:

use std::net::SocketAddr;

use tokio::net::TcpListener;

use tokio::io::{AsyncReadExt, AsyncWriteExt};

 

#[tokio::main]

async fn main() {

    // 监听端口

    let addr = SocketAddr::from(([127, 0, 0, 1], 8080));

    let listener = TcpListener::bind(&addr).await.unwrap();

 

    println!("Listening on: {}", addr);

 

    loop {

        // 等待并接受 let (mut socket, _) = listener.accept().await.unwrap();

 

        // 使用 tokio 的 spawn 创建一个新的任务来处理连接

        tokio::spawn(async move {

            // 读取请求数据

            let mut buffer = [0; 1024];

            let n = match socket.read(&mut buffer).await {

                Ok(n) if n == 0 => return,

                Ok(n) => n,

                Err(e) => {

                    eprintln!("Failed to read from socket; err = {:?}", e);

                    return;

                }

            };

 

            let request = String::from_utf8_lossy(&buffer[..n]);

            println!("Received request: {}", request);

 

            // 构建响应

            let response = "HTTP/1.1 200 OK\r\nContent-Length: 12\r\n\r\nHello World!";

 

            // 发送响应

            if let Err(e) = socket.write_all(response.as_bytes()).await {

                eprintln!("Failed to write to socket; err = {:?}", e);

            }

        });

    }

}

在这个示例中, tokio::main 宏标记了异步的入口点。服务器使用 TcpListener 监听端口,当有新的连接到来时,使用 tokio::spawn 创建一个新的任务来处理连接,这样可以同时处理多个连接请求。每个连接任务读取请求数据,然后发送一个简单的响应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值