nknorg/nkn-sdk-js

nkn.min.js 的问题

Closed this issue · 21 comments

本地调试
开发模式 地址是 ws://3.81.161.173:30002/

生产模式 地址变成了 wss://3-81-161-173.ipv4.nknlabs.io:30004/

不清楚是为什么

这是设计的一部分:nkn 节点会同时提供 ws 服务(30002)和 wss 服务(30004),sdk 会自动检测当前环境,如果是在浏览器中并且是 https 的网址,则会使用 wss 协议(否则会被浏览器 block),其他情况下会使用 ws 协议。如果想自己选择,可以在创建 client/multiclient 的时候通过 tls 选项来指定,参见 https://docs.nkn.org/nkn-sdk-js/

PS: wss 服务会依赖官方的 DNS 服务器来把 *.ipv4.nknlabs.io 解析到 IP 地址,所以除非万不得已(比如浏览器不允许使用 ws),不建议使用 wss

image
现在会出现链接不上

你使用的是 client 还是 multiclient?如果是 multiclient 并且只有其中一个连接有问题的话,那就是那个节点的问题,比如他的防火墙配置不对。这种情况下是可以忽略这个错误的,因为multiclient 只要有一个连接存活,就不影响他的功能。并且不同 client 地址(identifier 或 public key 至少有一个不同)连接到的 node 不同,不会影响其他 client

用的multiclient 4个都连不上

起了4个 4个都连不上
image

你有没有尝试过换几个identifier?如果一直是这样的话,那很可能是你的这个环境下 wss 被限制连接了……

我试试WS吧

image
一样不行

ws 这个是被浏览器 block 的。回到 wss 的那个情况,这种情况比较常见是被防火墙给 block 了,你有没有试过挂一个 VPN 再连接呢?

同一台电脑 挂着VPN wss不行 ws 可以

哎等等,ws 可以是什么意思?你上面的截图里面 ws 的错误是浏览器拦截的,和 VPN 应该没关系吧

本地开发环境 用ws 是可以的 没有block 上图是生产环境 HTTPS的

你的这个环境是普通的浏览器么?还是修改过的环境比如小程序呢?像小程序这种貌似就不允许任意域名的 wss 连接

普通的浏览器

你如果用同一个浏览器,在隐私模式下打开 https://nkn.org ,右下角的对话按钮能加载出来么?就像这样

image

不用隐私模式 也可以加载出来

那你能尝试改变一下你的 multiclient 的 seed 或者 identifier 吗?

我用的钱包获取的seed

是这样,不同的 client(seed 或者 identifier 不同)会连接到不同的 node,为了测试一下是不是你的这个 client 恰好连接到的四个节点 wss 都不工作,可以通过在创建 multiclient 的时候指定不同的 identifier 来让他们连接到完全不同的 node

怎么能链接自己的NODE呢
我这边好像有自己的NODE

是没有办法指定自己的 node 作为收发消息(ws)的节点的,只能用自己的 node 作为 rpc 节点。因为要考虑到别人发给你的消息需要快速送达到你,所以 client 和 node 之间的关系必须是大家都一致的信息,不能自己指定