pub struct DHTServer { /* private fields */ }Implementations§
Source§impl DHTServer
impl DHTServer
pub async fn new(options: DHTOptions) -> Result<Self>
pub fn local_addr(&self) -> Result<SocketAddr>
Sourcepub fn on_metadata_fetch<F, Fut>(&self, callback: F)
pub fn on_metadata_fetch<F, Fut>(&self, callback: F)
设置元数据获取前的检查回调
此回调在发现新的 info_hash 后,但在实际连接对等端获取元数据之前执行。
你可以在这里进行去重检查(如查询数据库),返回 true 表示继续获取,false 表示跳过。
§注意事项
- 回调是在
MetadataScheduler的 Worker 线程中异步执行的(通过.await)。 - 支持耗时操作(如数据库查询),但请注意 Worker 数量限制(默认 500)。
- 如果回调执行过慢,可能会导致任务队列堆积。
§示例
ⓘ
server.on_metadata_fetch(|hash| async move {
// 检查数据库是否存在
// let exists = db.has(hash).await;
// !exists
true
});Sourcepub fn on_torrent<F>(&self, callback: F)
pub fn on_torrent<F>(&self, callback: F)
设置成功获取到种子信息的回调
当成功从对等端下载并解析出种子元数据(Metadata)后调用。
§注意事项
- 此回调是在 Worker 线程中同步执行的。
- 如果包含耗时操作(如写入大量数据或复杂计算),必须在回调内部手动使用
tokio::spawn。 - 否则会阻塞当前的元数据获取 Worker,降低系统吞吐量。
§示例
ⓘ
server.on_torrent(|info| {
// 简单操作可以直接做
println!("Got torrent: {}", info.name);
// 耗时操作建议 spawn
tokio::spawn(async move {
save_to_db(info).await;
});
});Sourcepub fn set_filter<F>(&self, filter: F)
pub fn set_filter<F>(&self, filter: F)
设置 Hash 过滤器
在处理 announce_peer 消息时,用于快速判断是否应该处理该 Hash。
这通常用于布隆过滤器之前的黑名单或白名单机制。
§注意事项
- 此回调是在 UDP 处理线程中同步执行的。
- 绝对禁止执行任何耗时操作(如 IO、数据库查询、锁等待)。
- 任何延迟都会直接阻塞网络包的接收,导致丢包。
- 应仅进行纯内存的快速判断。
pub fn get_node_pool_size(&self) -> usize
pub async fn start(&self) -> Result<()>
Trait Implementations§
Auto Trait Implementations§
impl Freeze for DHTServer
impl RefUnwindSafe for DHTServer
impl Send for DHTServer
impl Sync for DHTServer
impl Unpin for DHTServer
impl UnwindSafe for DHTServer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more