在连接到Kaleido节点的Websocket后,我立即得到一个‘连接在send()上没有打开’的错误。我正在尝试使用来自WebsocketProvider版本1.0.0-beta.34的web3js。
我的连接代码如下所示,其中username、password和wssUrl是包含Kaleido节点信息的局部变量。
const web3 = new Web3(new Web3.providers.WebsocketProvider(`wss://${username}:${password}@${wssUrl}`))
我已经尝试了这个吉特布问题中列出的建议步骤--尝试在连接丢失时重新连接,但是错误仍然存在。我认为这可能是一个Kaleido问题,因为我可以使用WebsocketProvider的本地加纳赫帐户。
如果能够为Kaleido节点使用Websocket连接会很有帮助,所以我可以使用web3js 1.0版本。HTTP工作得很好,但是在web3js 1.0中,不推荐侦听带有HttpProvider的事件,从而迫使您使用WebsocketProvider。谢谢!
发布于 2018-07-12 14:28:42
更新
web3js 1.0.0-beta.34将回到Node的遗留URL解析器。为了解决这一问题,已经将更改提交给了ethereum/web3.js的1.0分支。
为了解决这个问题:
npm i -g lerna
npm i https://github.com/ethereum/web3.js.git\#1.0勒纳只是web3项目在开发过程中所依赖的一个构建工具。
我刚刚看到了这个请求的Wireshark日志,似乎web3js在WebSocket升级请求期间没有传递基本的Authn头。
GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: XXXX==
Host: zzzzz-zzzzz-wss.us-east-2.kaleido.io 人们可能会认为,Sec-WebSocket是一个Authn头,但它实际上是另一种攻击的协议对策。您可以在以下问题上阅读更多内容:证券交易委员会-WebSocket-钥匙是干什么用的?
我会看一看,看看我是否能破解一个补丁,使这个工作。
https://stackoverflow.com/questions/51305482
复制相似问题