小编dmp*_*p32的帖子

为什么 tokio::spawn 即使使用 .clone() 也会抱怨生命周期?

我试图编译以下看似简单的代码,但出现错误:

use std::io::Error;

#[derive(Debug)]
struct NetworkConfig {
    bind: String,
    node_key_file: String,
}

async fn network_handler(network_config: &NetworkConfig) -> Result<(), Error> {
    Ok(())
}

async fn run(network_config: &NetworkConfig) -> Result<(), Error> {
    let network_config_copy = network_config.clone();
    tokio::spawn(async move {
        network_handler(&network_config_copy).await
    }).await?
}
Run Code Online (Sandbox Code Playgroud)
use std::io::Error;

#[derive(Debug)]
struct NetworkConfig {
    bind: String,
    node_key_file: String,
}

async fn network_handler(network_config: &NetworkConfig) -> Result<(), Error> {
    Ok(())
}

async fn run(network_config: &NetworkConfig) -> Result<(), Error> {
    let network_config_copy = network_config.clone();
    tokio::spawn(async move {
        network_handler(&network_config_copy).await
    }).await?
}
Run Code Online (Sandbox Code Playgroud)

从之前关于该主题的讨论和示例中,我了解到传递对 …

lifetime rust async-await rust-tokio

5
推荐指数
1
解决办法
2925
查看次数

如何有效地使用boost asio套接字进行全双工流式传输?

我正在使用boost.asio编写一个性能关键的双向流服务器.
服务器以这种方式工作:

  • 线程A处理并推送要在OUTPUT队列中发送的对象
  • 线程B等待INPUT队列中的对象来处理它们
  • 线程C是一个接受器线程,它接受传入的客户端并为每个客户端创建一个CLIENT类

多个客户端同时运行,每个客户端都有自己的连接套接字,每个客户端必须同时执行两项操作:

  • 等待(条件变量)至少一个对象出现在OUTPUT队列中(这可能需要很长时间)并尽可能快地发送
  • 从套接字获取任何传入对象,并将其放入INPUT队列

此外,性能和多核可扩展性在此应用程序中至关重要.

标准的异步方法在这里失败(发送回调可能会在等待新对象发送时阻止其他回调)和阻塞方法(每个方向使用1个线程)很复杂,我无法弄清楚如何处理其中一个线程出错.

我应该为每个客户端使用2个插槽(一个用于输出,一个用于输入)?或者可能以某种方式在每个套接字上使用两个io_services,在两个不同的线程上进行并发回调支持?

请解释一下你将如何应对这种情况.谢谢.

c++ streaming boost duplex boost-asio

3
推荐指数
1
解决办法
2469
查看次数

标签 统计

async-await ×1

boost ×1

boost-asio ×1

c++ ×1

duplex ×1

lifetime ×1

rust ×1

rust-tokio ×1

streaming ×1