rust - `__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!(),
}
}
}
(来源)
解决方案
推荐阅读
- angular - .subscribe(x=> ...) 和 .subscribe(next(...)) 之间的区别?
- laravel - 从数据透视表中显示刀片中的数据
- python - 将列表列表转换为字典字典
- deep-learning - PyTorch-lightning 模型在第一个 epoch 后内存不足
- numpy - Pytorch:Numpy 数组
- python - 如何在 Tensorflow 的期望时期改变对损失施加的权重?
- typescript - ESlint 在类中给出关于索引器签名的错误
- unity3d - 在 Unity 中,尽管删除了脚本,但当我创建另一个同名文件时,它说脚本是重复的
- github - Github API - 比较 2 个提交 - 大比较 - 无法获取所有更改的文件
- javascript - Javascript让双重声明