PubSub
使用PubSub , 我们可以订阅主题并取回这些主题下发布的信息 。在js-ipfs中 , 我们可以设置一个回调函数 , 这样在收到信息时就可以得到通知了:
![教程 在浏览器中实现IPFS连接的指引](http://img.jiangsulong.com/220427/15230K213-15.jpg)
文章插图
发布也是很简单的:
![教程 在浏览器中实现IPFS连接的指引](http://img.jiangsulong.com/220427/15230I559-16.jpg)
文章插图
这就是这个聊天演示应用的功能 。它订阅了一个名为"discochat-global"的全局主题 , 并简单地将人们输入的信息通过PubSub进行中继 。
?? 可能存在的浏览器问题
假设你的操作都正确完成了 , 就可以使用WebRTC-Star和 p2p-circuit来寻找节点 。太棒了!不过 , 你可能会发现连接超时 , 而且无法恢复 。我并不确定这种行为发生的原因(可能是某些浏览器策略);不过我们还是可以努力尝试应对这些问题的!
与节点保持连接
我们有几种方式与节点保持连接 。第一种是更直接的:每隔4秒通过discochat-keepalive订阅和发送"keepalive"信息:
![教程 在浏览器中实现IPFS连接的指引](http://img.jiangsulong.com/220427/15230J2P-17.jpg)
文章插图
这应该能帮助确保我们为有意向聊天的节点提供更高的优先度 。此外 , 我们每隔15秒通过announce-circuit进行汇报 , 以确保维持与回路中继的连接 , 这样就可以连接到NAT网络后的节点 。可通过以下的方式实现:
![教程 在浏览器中实现IPFS连接的指引](http://img.jiangsulong.com/220427/15230M255-18.jpg)
文章插图
在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连接的指引](http://img.jiangsulong.com/220427/15230H346-19.jpg)
文章插图
上述方法应该与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连接的指引】
推荐阅读
- 长山群岛属于哪个省 长岛在哪里哪个城市
- 乳胶枕可以在太阳下晒吗 乳胶能不能在太阳底下晒
- VS Code 安装和设置Visual Studio Code的简要教程
- 小龙虾能冷冻保存吗 大龙虾可以放在冰箱里冷藏吗
- 白茶在市场上多少钱斤,白茶市场价格多少钱斤
- Oracle如何创建只读用户
- 七岁男孩的生殖器标准
- 婴儿性格什么时候形成
- 儿童马尾辫的各种扎法是什么
- 屁股沟烂了有血丝怎么治