gpt4 book ai didi

sockets - 如何将Tokio设置为多线程UDP服务器?

转载 作者:行者123 更新时间:2023-12-03 11:41:57 27 4
gpt4 key购买 nike

到目前为止,我发现的唯一示例是Tokio存储库中的单线程示例Echo UDP。如何使用Tokio启动循环,该循环将产生一个新线程来处理新的UDP连接。

最佳答案

回答original version of the question

How does one set up Tokio 0.2 to “listen” for UDP data?


use tokio::net::UdpSocket; // "0.2.20", features = ["full"]

type Error = Box<dyn std::error::Error>;
type Result<T, E = Error> = std::result::Result<T, E>;

#[tokio::main]
async fn main() -> Result<()> {
let mut socket = UdpSocket::bind("127.0.0.1:9999").await?;

loop {
let mut data = [0; 1024];
let valid_bytes = socket.recv(&mut data).await?;
let data = &data[..valid_bytes];

eprintln!("Read {} bytes", data.len());
}
}

在一个窗口中:

% cargo run
Read 6 bytes
Read 5 bytes
Read 6 bytes

在另一个:

% nc -u 127.0.0.1 9999
alpha
beta
gamma

回答 current version of the question

How to set up Tokio as a multi-threaded UDP server?



上面的代码是多线程的; Tokio is multithreaded by default。您可能正在寻找创建并发(或并行)工作的方法。这可以通过产生一个任务来完成:
  • task::spawn
  • task::spawn_local
  • task::spawn_blocking
  • 关于sockets - 如何将Tokio设置为多线程UDP服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61778967/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com