我做了一个测试,看看如果我尝试获取一个不存在的 CID 会发生什么,看看我是否可以不断地询问 IPFS 中的每个对等点。它似乎不起作用。我“连接”到大约 10 个同行,然后它放弃了。我不确定我是否真的在“连接”。我不确定发生了什么。我不知道我实际上是在连接到任何对等点并要求他们提供 CID。我似乎连接到星型服务器,并看到一个对等点列表,但不确定我是否连接到任何这些对等点。
我应该听其他事件来调试正在发生的事情吗?如何收听我发送给同行的消息?
我对 Bittorrent DHT 工作原理的假设是,如果 CID 不存在,我最终应该询问网络上的每个对等方是否有这个 CID。全网只有10个peer吗?还是那台明星服务器上只有 10 个对等点?没有星服务器发现吗?如何找到“忙碌”的明星服务器?
<script src="https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js"></script>
<script>
(async () => {
window.node = await Ipfs.create()
window.node.libp2p.on('peer:discovery', (peer) => console.log('peer:discovery', peer))
window.node.libp2p.on('peer:connect', peerInfo => console.log('peer:connect', peerInfo))
window.node.libp2p.on('peer:disconnect', peerInfo => console.log('peer:disconnect', peerInfo))
window.node.libp2p.peerStore.on('peer', (peerId) => console.log('peer', peerId))
window.node.libp2p.peerStore.on('change:multiaddrs', ({ peerId, multiaddrs}) => {
const addresses = []
for (const multiaddr of multiaddrs) {
addresses.push(multiaddr.buffer.toString())
}
console.log('change:multiaddrs', {peerId, multiaddrs, addresses})
})
window.node.libp2p.peerStore.on('change:protocols', ({ peerId, protocols}) => console.log('change:protocols', {peerId, protocols}))
window.node.libp2p.on('error', (err) => console.log('error', err))
window.node.libp2p.connectionManager.on('peer:connect', (connection) => {
console.log('connectionManager:peer:connect', {connection, remoteAddr: connection.remoteAddr.buffer.toString()})
})
window.node.libp2p.connectionManager.on('peer:disconnect', (connection) => console.log('connectionManager:peer:disconnect', connection))
// fake CID does not exist
results = window.node.get("QmZbj5ruYneZb8FuR9wnLuJCpCXMQudhSdWhdhp5U1oPWJ")
for await (res of results) {
for await (content of res.content) {
window.content = content
console.log(content.toString())
}
}
})()
</script>