我做了一个测试,看看如果我尝试获取一个不存在的CID会发生什么,看看我是否可以不断地询问IPFS中的每个对等点。它似乎不起作用。我“连接”到大约10个同龄人,然后它放弃了。不过,我不确定我是不是真的在“连接”。我不太确定发生了什么事。我不知道我是不是真的连接到任何同龄人并向他们索要CID。我似乎连接到一个星型服务器,并看到一个对等体的列表,但我不确定我曾经连接过这些对等体中的任何一个。
有没有我应该监听的其他事件来调试正在发生的事情?我如何收听我发送给同级的消息?
我从Bittorrent分布式哈希表的工作原理中假设,如果CID不存在,我最终应该询问网络上的每个对等点是否有这个CID。整个网络中是否只有10个对等点?或者该星型服务器上只有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>发布于 2020-09-23 16:39:33
js-ipfs目前默认不开启分布式哈希表。您需要通过create选项显式地启用它。这将导致IPFS位交换协议在网络上查询您正在查找的内容。在分布式哈希表查询期间,如您所述,对等节点将根据分布式哈希表算法连接到网络上的其他对等节点,以便查找内容。
那么,为什么我们默认禁用分布式哈希表呢?由于几个原因,JS DHT实现不能很好地扩展,其中一些与DHT实现本身有关,另一些则与网络中不可用的节点和低效的连接管理器等其他原因有关。GO DHT在几个月前得到了真正的改进,JS实现将根据GO实现中最近的变化进行完全重构。连接管理器的改进也在进行中。
虽然分布式哈希表没有重构和稳定,但建议利用委托节点。委托节点是代表他人进行内容和对等路由查询的节点。js-ipfs@0.48是通过一些public delegated nodes configured by default发布的。代理节点是GO节点,它将代表JS节点执行DHT查询,这样,它将是幕后的go节点,它将与其他节点建立连接。
如果我能回答你的问题,请告诉我
https://stackoverflow.com/questions/63712616
复制相似问题