我一直在使用IPFS(行星际文件系统),它是一个共享的p2p文件系统。在此javascript实现中,一切正常,但是,我发现我只能连接到'/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'
地址,这是您不应该在生产中使用的转发器地址。
我一直在网上询问,有人告诉我在群地址中添加行"/ip4/0.0.0.0/tcp/4001/ws",
,然后在群地址中添加地址'/ip4/127.0.0.1/tcp/4001/ws/ipfs/QmdC3TgNDvYnJDDJE3sgNjhJNkmsfAvgogKVr4UVifKipM'
(其中QmdC3TgNDvYnJDDJE3sgNjhJNkmsfAvgogKVr4UVifKipM
是守护进程哈希,可以在终端中使用ipfs id
进行检测)。但是,这似乎不起作用。 (不用担心,我将在生产中更改这些ID值。)
这是我正在使用的一些代码。已注释掉的群集地址无法连接,但是p2p-websocket-repeater可以:
import IPFS from 'ipfs';
import Room from 'ipfs-pubsub-room';
<...>
<THEN ON PAGE MOUNT...>
<...>
const ipfs = new IPFS({
repo: "ipfs/sharedFolder",
EXPERIMENTAL: {
pubsub: true
},
config: {
Addresses: {
Swarm: [
// '/ip4/127.0.0.1/tcp/4001/ws/p2p-websocket-star/',
// '/ip4/127.0.0.1/tcp/4001/ws/ipfs/QmdC3TgNDvYnJDDJE3sgNjhJNkmsfAvgogKVr4UVifKipM',
// '/ip4/192.168.0.2/tcp/4001/ws/ipfs/QmdC3TgNDvYnJDDJE3sgNjhJNkmsfAvgogKVr4UVifKipM'
'/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'
]
}
}
})
ipfs.on('ready', async () => {
const room = Room(ipfs, 'room-name')
room.on('peer joined', (peer) => {
console.log('Peer joined the room', peer)
})
room.on('peer left', (peer) => {
console.log('Peer left...', peer)
})
room.on('message', (message) => {
console.log('got this message: ', message.data.toString());
})
// now started to listen to room
room.on('subscribed', () => {
console.log('Now connected!')
})
room.broadcast("hello there sailor")
})
我也尝试使用:
// const ipfs = new IPFS({
// EXPERIMENTAL: {
// pubsub: true
// },
// repo: "ipfs/shared",
// config: {
// "Bootstrap": [
// "/ip4/172.16.1.2/tcp/4001/ws/ipfs/QmdC3TgNDvYnJDDJE3sgNjhJNkmsfAvgogKVr4UVifKipM"
// ]
// },
// });
即使用Bootstrap而不是swarm,但是我也没有运气。一个考虑因素是,这都是在localhost上进行的,因此可能引起问题。在本地而不是在服务器上进行开发时,是否只能使用 使用p2p-websocket-star转发器?我确实确保在ipfs中允许Origin *解决CORS错误,所以我认为这不是问题。
如果有人有任何想法,请告诉我。谢谢!
编辑:
经过一番讨论后,我意识到我需要设置并运行自己的服务器来处理websocket,如此处所述:https://github.com/libp2p/js-libp2p-websocket-star(使用集合点命令)。
因此,在此之后(在终端中):
patientplatypus:~/Documents/zennify.me/backend:13:47:23$rendezvous --port=9090 --host=127.0.0.1
Listening on: http://127.0.0.1:9090
我尝试在浏览器中使用它:
const ipfs = new IPFS({
repo: "ipfs/sharedFolder",
EXPERIMENTAL: {
pubsub: true
},
config: {
Addresses: {
Swarm: [
'/ip4/127.0.0.1/tcp/9090/ws/p2p-websocket-star'
]
}
}
})
然后我在加载页面时收到此消息:
Swarm listening on /ip4/127.0.0.1/tcp/9090/ws/p2p-websocket-star/ipfs/QmXxNNekpYDbpfW7gtZP4vYeokG6QjgqnvMMTX2ZmTvCWn
Tasks.vue?cba9:125 Now connected!
10Tasks.vue?cba9:120 got this message: hello there sailor
client.js?6157:18 WebSocket connection to 'wss://nyc-2.bootstrap.libp2p.io/' failed: Error during WebSocket handshake: Unexpected response code: 502
那么几件事
它看到一群人在听!很好,建议我正在连接服务器。 :D
它将自己的消息广播回自身:D
它不能广播到另一个也打开的网页:<< / p>
它没有将其他选项卡视为已连接的同级项:<
是否一直尝试(失败)将网络套接字连接到NYC?为什么? :<< / p>
无论如何,如果有人有任何想法,这就是我要解决的问题。谢谢。