我使用 tokio 来监听 UDP 套接字。我发送/接收bincode
编码结构并使用serde
.
但是我应该如何处理Arc<tokio::sync::RwLock<T>>
字段的序列化?(我知道 serde 支持标准库同步RwLock
,但我需要异步)。
数据经常通过网络更改和传输(根据设计),因此每次我需要发送内容时等待多个读取锁可能不是一个好主意。
考虑到 serde 是同步的,我必须为每个RwLock
字段生成阻塞 tokio 任务。(每个领域都有RwLock
自己的领域)。所以这会变得非常慢。
处理这个的生锈方法是什么?
例子:
use serde::{Deserialize, Serialize};
use tokio::sync::RwLock;
#[derive(Serialize, Deserialize)]
struct Player {
// In order to serialize Player i'd have to one by one acquire lock for `meta` and then `stats`, and then some other potential fields.
pub id: u64,
pub meta: Arc<RwLock<Metadata>>,
pub stats: Arc<RwLock<Metadata>>,
pub someOtherField1: Arc<RwLock<...>>,
pub someOtherField2: Arc<RwLock<...>>,
pub someOtherField3: Arc<RwLock<...>>,
}