dat项目的问题';使用webrtc和signalhub在浏览器中创建hyperdb

dat项目的问题';使用webrtc和signalhub在浏览器中创建hyperdb,webrtc,dat-protocol,hyperdrive,dat-project,Webrtc,Dat Protocol,Hyperdrive,Dat Project,我正试图通过webrtc和signalhub在浏览器中使用hyperdb和swarming。代码非常简单,但是hyperdb replicate存在一些问题,因为hypercore中的sameKey检查导致连接被终止。所以,我在想。。。我没有正确地处理我的发现密钥和id密钥,以便对等方知道它们应该同步。这里是一些示例代码,有点混乱,但相关的是hyperdb初始化和webrtc/signalhub之类的东西(我想)。。。顶部的密钥是另一个对等方的发现密钥: const crypto = requ

我正试图通过webrtc和signalhub在浏览器中使用hyperdb和swarming。代码非常简单,但是hyperdb replicate存在一些问题,因为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)
  });
});

我在这里举了一个工作示例:

我认为您会收到该错误,因为您没有使用密钥初始化数据库:

var db = hyperdb(storage, key)
一旦这样做,您就可以获得发现密钥。通常,您不需要到处复制发现密钥,因为发现密钥总是从公钥生成的


如果这不起作用,请只包含相关代码或最低限度的示例,以便更容易调试=)。谢谢

介意把注释过的代码和不相关的部分去掉吗?很难说清楚该看什么。我可以尝试设置基本的hyperdb/webrtc设置(不确定是否有人测试过)。这可能是因为您没有使用现有密钥初始化新数据库。@joehand谢谢您的回答!我只是不知道你说的“钥匙”是什么意思。在您的示例中,它看起来像是作为参数传入的。与实际的dat文档类似:“只需确保使用archive.key作为第一个参数引用之前创建的存档:”。。。似乎有几个可能的“键”:db.key、db.discoveryKey、db.local.key。。。或者我完全错了。好吧,钥匙就是db钥匙。我想我这里有些有用的东西。