From 070d50e4244947cc35a758fba6fd23247d23e401 Mon Sep 17 00:00:00 2001 From: AstaFrode Date: Tue, 4 Jul 2023 14:26:06 +0800 Subject: [PATCH] update discover (#49) --- core/node.go | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/core/node.go b/core/node.go index cd3bef6..574f5cd 100644 --- a/core/node.go +++ b/core/node.go @@ -28,6 +28,7 @@ import ( dht "github.com/libp2p/go-libp2p-kad-dht" "github.com/libp2p/go-libp2p/core/connmgr" "github.com/libp2p/go-libp2p/core/crypto" + "github.com/libp2p/go-libp2p/core/discovery" "github.com/libp2p/go-libp2p/core/event" "github.com/libp2p/go-libp2p/core/host" "github.com/libp2p/go-libp2p/core/network" @@ -223,7 +224,7 @@ func NewBasicNode( dhtProtocolVersion: dhtProtocolVersion, discoverStat: atomic.Uint32{}, bootstrap: bootstrap, - discoveredPeerCh: make(chan peer.AddrInfo, 100), + discoveredPeerCh: make(chan peer.AddrInfo, 600), protocols: NewProtocol(), } @@ -689,9 +690,10 @@ func (n *Node) discoverPeers(ctx context.Context, h host.Host, dhtProtocolVersio if n.discoverStat.Load() > 0 { return } - + ctxCancel, cancel := context.WithCancel(ctx) defer func() { recover() + cancel() n.discoverStat.Store(0) }() @@ -709,29 +711,38 @@ func (n *Node) discoverPeers(ctx context.Context, h host.Host, dhtProtocolVersio routingDiscovery := drouting.NewRoutingDiscovery(kademliaDHT) dutil.Advertise(ctx, routingDiscovery, Rendezvous) + go findPeers(ctxCancel, routingDiscovery) + + for { + select { + case peer := <-n.discoverEvent: + for _, v := range peer.Responses { + n.discoveredPeerCh <- *v + } + } + } +} + +func findPeers(ctx context.Context, routingDiscovery *drouting.RoutingDiscovery) { + var ok bool + tick := time.NewTicker(time.Minute) defer tick.Stop() for { select { + case <-ctx.Done(): + return case <-tick.C: - peerChan, err := routingDiscovery.FindPeers(ctx, Rendezvous) + peerChan, err := routingDiscovery.FindPeers(ctx, Rendezvous, discovery.Limit(300)) if err == nil { for { - peer, ok := <-peerChan + _, ok = <-peerChan if !ok { break } - if peer.ID == h.ID() { - continue - } - n.discoveredPeerCh <- peer } } - case peer := <-n.discoverEvent: - for _, v := range peer.Responses { - n.discoveredPeerCh <- *v - } } } }