问题标签 [libp2p]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 连接 2 个 libp2p 节点( browser-nodejs 节点)
我对 libp2p 的概念非常陌生,这就是我想要实现的目标。我有一个浏览器节点/对等点,我需要与一个试图部署在 docker 容器上的 nodejs 对等点连接。当我考虑使用 webrtc-star 传输时,我需要一个集合服务器,但我不知道如何创建一个,因为节点不会在同一台服务器上运行,所以我想放置一个本地地址是不好的。所以问题是,如何托管一个集合服务器?webrtc-direct 是这里的解决方案吗?如果是这样,我如何定义要收听的地址(nodejs节点在笔记本电脑上运行,而另一个对等方在移动设备上)
webrtc - 实验性 libp2p-webrtc-star 信号服务器是否仅在本地工作?
我正在使用此示例https://github.com/libp2p/js-libp2p/tree/master/examples/libp2p-in-the-browser并尝试通过给定的托管 Rendezserver '/dns4/wrtc连接到 nodejs 对等体-star2.sjc.dwebops.pub/tcp/443/wss/p2p-webrtc-star '。找到对等点,但未建立连接。如果我在与浏览器对等体相同的机器上运行 nodejs 对等体,它们会连接,但如果 nodejs 对等体在不同的机器/网络上,对等体会找到彼此但它们没有连接。这是正常的吗?
generics - 我可以从函数返回一个通用结构吗?
对不起,如果以下答案是直截了当的,但我似乎无法理解。
我需要创建一个 swarm 并将 swarm 返回到主函数,但我不知道如何返回一个通用结构,例如“P2p”结构。
特征用于抽象方法,因此我不能声明一个来抽象结构的属性。
ps: swarm 是 struct ExpandedSwarm<"依赖于行为和传输的东西">
pps:感谢您的任何意见。
erlang - 客户端之间的 libp2p yamux 协议协商不成功(go-libp2p 和 erlang-libp2p)
我是 libp2p 的新手,我正在尝试通过标准 TCP 传输建立从一个 libp2p 对等体 (erlang-p2p) 到另一个 (go-libp2p) 的成功连接。erlang 客户端是稳定和维护的客户端,我正在尝试在 golang 中复制所述客户端。
两个 erlang 客户端之间的初始协商过程类似于基于读取正在发送/接收的原始数据(客户端 A 正在连接到客户端 B):
注意:yamux 协议 id 中前导反斜杠的省略是有意的,因为那是 erlang 客户端发送的内容。
上述建立后,就可以创建会话了。但是,将客户端 B 换成我的简单 go-libp2p 主机,我无法成功协商步骤 2。我用于简单 go-libp2p 客户端的代码如下:
当erlang客户端尝试连接go客户端时,多流协议协商成功,但是在收到yamux协议id后,go客户端发回na
表示不支持该协议,尽管我已经明确声明了libp2p在配置选项中使用 yamux。此外,根据此处的文档,即使使用默认配置选项,似乎也应该支持 yamux/1.0.0。
我觉得我可能遗漏了一些基本的东西,感谢您的帮助。
我已经尝试过的东西:
- 删除所有配置并使用默认的 libp2p 设置
- 将
NoSecurity
选项添加到配置中(看起来 erlang 客户端似乎没有就我所知的任何安全性进行协商) - 将 Muxer ID 更改
"yamux/1.0.0"
为"/yamux/1.0.0"
rust - 将记录放入 DHT
我正在尝试/pk
使用 Rust 和rust-libp2p向 IFPS DHT 插入一个简单的记录
这是我的代码(Rust 1.55,libp2p-rust 0.39.1):
此代码成功找到 20 多个节点来插入记录,但插入总是失败。当我使用 运行我的代码时RUST_LOG=debug
,我看到每个对等方在插入期间都终止了与 EOF 的连接。打电话kademlia::bootstrap()
也没用。
仅供参考,当我使用 Go 和go-libp2p运行非常相似的东西时,它按预期工作:
编辑:奖励赏金,用于简单演示如何使用 Rust 和 rust-libp2p 将记录添加到 IPFS DHT
javascript - 将 libp2p 与 create-react-app 一起使用时无法解析“node:http”
我是 libp2p 的新手,所以如果这是在其他地方被询问/讨论过的问题,请原谅。我正在尝试在使用 create-react-app 制作的新创建项目中进行设置。该应用程序当前有一个组件,其中包含以下内容:
从'libp2p-mplex'导入mplex;从“libp2p-noise”导入噪声;从'libp2p'导入Libp2p;
类连接器扩展组件{
我知道仅此一项不足以连接到任何东西,但它甚至无法编译。运行此程序时,我收到以下错误消息:
未找到模块:无法解析“/Users/myuser/projects/p2p-browser/node_modules/node-fetch/src”中的“node:http”</p>
我查看了引用的 node-fetch 模块的源代码,发现它确实需要 node:http。我还发现 node: 前缀是让 node 始终包含 node 的本机 http 模块。由于这是一个在浏览器上运行的 react-app,我认为根本没有理由使用 node-fetch,这导致我认为 libp2p 与浏览器不兼容,或者我正在使用 node.js libp2p 版本而不是“浏览器版本”,但到目前为止,我还没有找到任何文档表明存在“浏览器版本”,我见过的示例使用 parcel 并包含相同的 npm 模块。那么,我是否遗漏了什么,或者 libp2p 只是与 create-react-app 不兼容,需要使用 parceljs 为浏览器编译?
任何帮助将不胜感激。谢谢你。
libp2p - Libp2p 中的协议到底是什么?
我刚刚阅读了此处文档中的协议部分,我不得不说它给我留下的问题多于答案。
我从中得到的基本上是该协议允许节点以特定方式进行通信。但我知道它已经被称为协议,我不必阅读这篇文章。有关协议 ID 和协议协商的信息也没有提供太多价值。
我认为我缺少的是:
- libp2p中的协议结构是什么?它提供什么接口,遵循什么规则等
- 不要只列出内置协议(Ping、Identify、secio 等)的示例,而是展示如何使用它们并将其与它们提供的接口相关联。
- 也许还有一个快速展示如何编写自定义协议的高级部分。
有人愿意提供更好的解释吗?
node.js - 为什么节点在同一网络上的不同计算机上运行时只发现彼此但不连接
我正在尝试加快使用 js-libp2p 的速度,并且正在使用以下代码片段:
如果我从同一台计算机上的两个控制台运行它,则在启动第二个控制台时,我会得到以下预期输出:
并从另一个控制台也:
但是,如果我移动相同的脚本并在同一网络上的另一台计算机上运行它,我只会看到 Discovered 日志。连接日志永远不会被打印出来。例如我只看到这个:
有人解释为什么会这样吗?还有我需要做什么才能完全连接?因为当我使用 libp2p 时,我希望节点在两台计算机上运行。
peer:discovery
还可以解释事件和peer:connect
事件之间的区别吗?我的意思是对等发现与对等连接有何不同?
PS:我还注意到连接日志会不时打印出来。为什么也是这样?