webrtc - 带有 webrtc 和 signalhub 的浏览器中 dat 项目的 hyperdb 问题
问题描述
我正在尝试通过 webrtc 和 signalhub 在浏览器中使用 hyperdb。代码非常严格,但是 hyperdb 复制存在一些问题,由于 hypercore 中的 sameKey 检查而导致连接被终止。所以,我在想......我没有正确地处理我的发现键和 id 键,所以对等方知道他们应该同步。这是一些示例代码,它有点乱,但相关位是 hyperdb 初始化和 webrtc/signalhub 的东西(我认为)......顶部的关键是另一个对等点的发现密钥:
const crypto = require('crypto'),
sha = crypto.createHash('sha1'),
hyperdb = require('hyperdb'),
hyperdiscovery = require('hyperdiscovery'),
cms = require('random-access-idb')('cms'),
webrtc = require('webrtc-swarm'),
signalhub = require('signalhub'),
hyperdrive = require('hyperdrive'),
pump = require('pump');
// Discovery key of other peer/signalhub channel
var key = "cbffda913dabfe73cbd45f64466ffda845383965e66b2aef5f3b716ee6c06528";
const db = hyperdb(filename => {
return cms(filename);
}, { valueEncoding: 'utf-8' });
var DEFAULT_SIGNALHUBS = 'https://signalhub-jccqtwhdwc.now.sh';
db.on('ready', function () {
const swarm = webrtc(signalhub(key, DEFAULT_SIGNALHUBS));
swarm.on('peer', function (conn) {
console.log("PEER!!!!!!!");
const peer = db.replicate({
upload: true,
download: true
});
pump(conn, peer, conn)
});
});
解决方案
我在这里提出了一个工作示例:https ://github.com/joehand/hyperdb-web-example/blob/master/index.js
我认为您收到该错误是因为您没有使用密钥初始化数据库:
var db = hyperdb(storage, key)
完成此操作后,您可以获得发现密钥。通常,您不需要复制发现密钥,因为它始终是从公钥生成的。
如果这不起作用,请仅包含相关代码或最小示例,这样更容易调试 =)。谢谢!
推荐阅读
- python-3.x - 仅每 5 秒触发一次(聊天触发的机器人)的问题
- java - 如何通过 REST 从我的 Jhipster 应用程序下载文件?
- azure - 如何将 Vagrant Kubernetes 集群连接到 Azure DevOps
- ruby-on-rails - 为 HighChart 列范围表示转换和排序数据
- python - zarr 生成多少文件?
- javascript - Object.getOwnPropertyNames() 似乎没有返回所有可访问的属性
- amazon-web-services - AWS S3 发送 download.txt 文件
- python - 如何修复“TypeError:‘模块’对象不可调用”?
- html - 当我滑动内容的滑块时,如何使离子段可滑动
- java - 为什么函数式处理大量数据时比命令式要快,而处理少量数据时比命令式要慢?