This commit is contained in:
@@ -184,6 +184,9 @@ func (n *Node) Serve() error {
|
||||
n.loopSeeder()
|
||||
}()
|
||||
|
||||
n.wg.Add(1)
|
||||
go func() { defer n.wg.Done(); n.loopPeerExchange() }()
|
||||
|
||||
if n.cfg.EnableDiscovery && n.cfg.DiscoveryAddress != "" {
|
||||
n.wg.Add(2)
|
||||
go func() {
|
||||
@@ -226,6 +229,43 @@ func (n *Node) Close(ctx context.Context) error {
|
||||
|
||||
/*** Loops ***/
|
||||
|
||||
func (n *Node) loopPeerExchange() {
|
||||
t := time.NewTicker(30 * time.Second)
|
||||
defer t.Stop()
|
||||
for {
|
||||
select {
|
||||
case <-n.stop:
|
||||
return
|
||||
case <-t.C:
|
||||
}
|
||||
// Seeds abfragen
|
||||
for _, s := range n.cfg.Seeds {
|
||||
if strings.TrimSpace(s) == "" {
|
||||
continue
|
||||
}
|
||||
resp, err := n.client.Get(strings.TrimRight(s, "/") + "/mesh/peers")
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
var list []Peer
|
||||
if json.NewDecoder(resp.Body).Decode(&list) == nil {
|
||||
n.mu.Lock()
|
||||
for _, p := range list {
|
||||
if p.URL == "" || p.URL == n.self.URL {
|
||||
continue
|
||||
}
|
||||
if _, ok := n.peers[p.URL]; !ok {
|
||||
cp := p
|
||||
n.peers[p.URL] = &cp
|
||||
}
|
||||
}
|
||||
n.mu.Unlock()
|
||||
}
|
||||
resp.Body.Close()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (n *Node) loopSeeder() {
|
||||
// attempt to hello known seeds every 5s at start, then every 30s
|
||||
backoff := 5 * time.Second
|
||||
|
||||
Reference in New Issue
Block a user