<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                在startNode中,一旦本地主機創建完成,需要將其納入到區塊鏈網絡(P2P網絡),我們執行: err = SetupDiscovery(ctx, host) 我們再次把此函數的的實現copy如下: ``` // SetupDiscovery 建立發現機制,并將本地主機連接到所有已經發現的對等端(peer) func SetupDiscovery(ctx context.Context, host host.Host) error { // 開啟一個DHT,用于對等端(peer)發現。 // 我們不僅僅是創建一個新的DHT,因為我們要求每一個端維護它自己的本地DHT副本,這樣 // 以來,DHT的引導節點可以關閉,不會影響后續的對等端發現 ? ? kademliaDHT, err := dht.New(ctx, host) if err != nil { panic(err) } // 引導DHT。在缺省設置下,這生成一個后臺線程,每5分鐘刷新對等端表格 ? ? log.Info("引導DHT") if err = kademliaDHT.Bootstrap(ctx); err != nil { panic(err) } // 讓我們首先連接到所有的引導節點(bootstrap nodes),它們會告訴我們網絡中的其他節點 var wg sync.WaitGroup for _, peerAddr := range dht.DefaultBootstrapPeers { ? ? ? ? peerinfo, _ := peer.AddrInfoFromP2pAddr(peerAddr) ? ? ? ? wg.Add(1) //使用多個協程,加快連接處理 go func() { defer wg.Done() if err := host.Connect(ctx, *peerinfo); err != nil { ? ? ? ? log.Error(err) } else { ? ? ?log.Info("連接已建立,使用的引導節點是:", *peerinfo) } }() } ? ? wg.Wait()//阻塞,確保所有的協程全部返回 // 我們使用一個會合點“wlsell.com”來宣布我們的位置 // 這就像告訴你的朋友在某個具體的地點會合 ? ? log.Info("宣布我們自己...") routingDiscovery := discovery.NewRoutingDiscovery(kademliaDHT) ? ? discovery.Advertise(ctx, routingDiscovery, "rendezvous:wlsell.com") ? ? log.Info("成功宣布!") // 現在,查找那些已經宣布的對等端 // 這就像你的朋友告訴你會合的地點 ? ? log.Info("搜索其它的對等端...") ? ? peerChan, err := routingDiscovery.FindPeers(ctx, "rendezvous:wlsell.com") if err != nil { panic(err) } // 連接到所有新發現的對等端(peer) for peer := range peerChan { if peer.ID == host.ID() { continue//不連接自己 } ?log.Debug("找到對等端:", peer) ?log.Debug("正在連接到:", peer) err := host.Connect(context.Background(), peer) if err != nil { ? log.Warningf("連接到對等端 %s:失敗 %s\\n", peer.ID.Pretty(), err) continue } log.Info("已經連接到:", peer) } return nil } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看