教程 在浏览器中实现IPFS连接的指引( 四 )


PubSub
 
使用PubSub , 我们可以订阅主题并取回这些主题下发布的信息 。在js-ipfs中 , 我们可以设置一个回调函数 , 这样在收到信息时就可以得到通知了:

教程 在浏览器中实现IPFS连接的指引

文章插图
 
发布也是很简单的:
教程 在浏览器中实现IPFS连接的指引

文章插图
 
这就是这个聊天演示应用的功能 。它订阅了一个名为"discochat-global"的全局主题 , 并简单地将人们输入的信息通过PubSub进行中继 。
 
?? 可能存在的浏览器问题
 
假设你的操作都正确完成了 , 就可以使用WebRTC-Star和 p2p-circuit来寻找节点 。太棒了!不过 , 你可能会发现连接超时 , 而且无法恢复 。我并不确定这种行为发生的原因(可能是某些浏览器策略);不过我们还是可以努力尝试应对这些问题的!
 
与节点保持连接
 
我们有几种方式与节点保持连接 。第一种是更直接的:每隔4秒通过discochat-keepalive订阅和发送"keepalive"信息:
教程 在浏览器中实现IPFS连接的指引

文章插图
 
这应该能帮助确保我们为有意向聊天的节点提供更高的优先度 。此外 , 我们每隔15秒通过announce-circuit进行汇报 , 以确保维持与回路中继的连接 , 这样就可以连接到NAT网络后的节点 。可通过以下的方式实现:
教程 在浏览器中实现IPFS连接的指引

文章插图
 
在p2p-circuit#使用(#usage)可以找到简化版本的processAnnounce 。
 
回路中继上的Python脚本会每隔4秒汇报一个保持活跃连接(keepalive)信息 。你可能已经注意到我们汇报的是 "peer-alive" 而不是"keep-alive"信息;这是为了将节点请求与中继请求区分开来 , 让我们更容易知道缺乏可用中继的情况 。
 
与回路中继保持连接
 
在processAnnounce的简化版本之外 , 在真实的版本中有几个变量用于追踪keep-alive和peer-alive信息 。它们各自是lastAlive和lastPeer 。我们甚至可以通过lastBootstrap来追踪最近一次的初始化启动(bootstrap)时间 。通过这些 , 我们可以在只连接到节点(通过lastPeer追踪)时展示黄色的状态 , 而在35秒内没有看到keep-alive信息时(且没有在60秒内尝试初始化启动时)可以尝试重新连接到初始化启动中继(并展示红色状态) 。可通过以下的方式实现:
教程 在浏览器中实现IPFS连接的指引

文章插图
 
上述方法应该与processAnnounce的完整版本一起使用 , 因为它依赖于简化版本中没有包含的lastAlive和 lastPeer功能 。
 
总结
 
我希望这些信息足够带你上手了 。如果你成功遵循这个指引 , 你就有能力部署可完全在浏览器中运行的功能强大的IPFS应用 , 并在任何地方利用去中心化的P2P网络 。我选择了一些有用的资源并分享在下面以供进一步阅读:
 
  • js-ipfs/docs/BROWSERS.md(https://github.com/ipfs/js-ipfs/blob/master/docs/BROWSERS.md)
  • js-ipfs/docs/CONFIG.md(https://github.com/ipfs/js-ipfs/blob/master/docs/CONFIG.md)
  • js-ipfs/docs/core-api(https://github.com/ipfs/js-ipfs/tree/master/docs/core-api)
  • js-ipfs/examples/circuit-relaying(https://github.com/ipfs/js-ipfs/tree/master/examples/circuit-relaying)
  • js-libp2p-webrtc-star(https://github.com/libp2p/js-libp2p-webrtc-star)

【教程 在浏览器中实现IPFS连接的指引】


推荐阅读