首页 > 解决方案 > `__self` 是一个 `&` 引用,所以它所引用的数据不能被借用为可变的

问题描述

我想用 Rust 来实现一个简单的命令和控制服务器。该项目是https://github.com/wilbyang/c2server ,里面有3个组件,server组件是controller,admin组件发出指令并检索指令结果,implant组件是受害机器。交互如下

椭圆 3 gRPC 调用中的部分。服务器内部有 2 个队列,两个部分一个是 AdminService,另一个是 ImplantService。在我的实现中,AdminService 结构中有两个成员,分别是 mpsc-1 的 tx 引用和 mpsc-2 的 rx 引用。我在gRPC的实现中需要使用self.rx来接收消息,所以rx必须是mut引用,但是gRPC方法stub,self是一个通用的引用。所以我得到错误__self是一个&引用,所以它引用的数据不能被借用为可变的。

对应的代码就是Ok(())这里的arm:

#[tonic::async_trait]
impl Admin for AdminService {
    async fn run_command(&self, request: Request<Command>) -> Result<Response<Command>, Status> {
        let cmd = request.into_inner();
        match self.tx.send(cmd.clone()).await {
            Ok(()) => match self.rx.recv().await {
                Some(cmd) => Ok(Response::new(cmd.clone())),
                None => todo!(),
            },
            Err(_) => todo!(),
        }
    }
}

来源

标签: rustrust-tokio

解决方案


推荐阅读