From 70ee4a59b22af0cdf87165f8173b369662f7314f Mon Sep 17 00:00:00 2001
From: Awiteb
Date: Thu, 8 May 2025 14:25:09 +0000
Subject: [PATCH] perf: Connect to relays in a separate task
Signed-off-by: Awiteb
---
src/nostr_utils/mod.rs | 21 ++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/src/nostr_utils/mod.rs b/src/nostr_utils/mod.rs
index cc697ff..638d73d 100644
--- a/src/nostr_utils/mod.rs
+++ b/src/nostr_utils/mod.rs
@@ -21,6 +21,7 @@ pub mod utils;
use std::time::Duration;
+use futures::future;
use nostr::{
event::{Event, EventId, Kind, UnsignedEvent},
filter::Filter,
@@ -71,15 +72,21 @@ impl NostrClient {
/// Add relays and connect to them
pub async fn add_relays(&self, relays: &[RelayUrl]) {
+ let mut tasks = Vec::new();
for relay in relays {
- self.client
- .add_relay(relay)
- .await
- .expect("It's a valid relay url");
- if let Err(err) = self.client.try_connect_relay(relay, CLIENT_TIMEOUT).await {
- tracing::error!("Failed to connect to relay '{relay}': {err}");
- }
+ let relay = relay.clone();
+ let client = self.client.clone();
+ tasks.push(tokio::spawn(async move {
+ client
+ .add_relay(&relay)
+ .await
+ .expect("It's a valid relay url");
+ if let Err(err) = client.try_connect_relay(&relay, CLIENT_TIMEOUT).await {
+ tracing::error!("Failed to connect to relay '{relay}': {err}");
+ }
+ }));
}
+ future::join_all(tasks).await;
}
/// Broadcasts an unsigned event to given relays, optionally broadcast the