Node.js web3.eth.subscribe未针对web3版本1.0.0-beta.27实施
我使用的是web3版本Node.js web3.eth.subscribe未针对web3版本1.0.0-beta.27实施,node.js,blockchain,ethereum,web3,Node.js,Blockchain,Ethereum,Web3,我使用的是web3版本1.0.0-beta.27,我正在运行一个私有以太坊区块链进行测试。区块链正在挖掘,有两个用户,现在我想订阅区块链中的事件并执行一些操作。代码如下: var Web3 = require("web3"); var ether_port = 'http://localhost:8545' var web3 = new Web3(new Web3.providers.HttpProvider(ether_port)); web3.eth.subscri
1.0.0-beta.27
,我正在运行一个私有以太坊区块链进行测试。区块链正在挖掘,有两个用户,现在我想订阅区块链中的事件并执行一些操作。代码如下:
var Web3 = require("web3");
var ether_port = 'http://localhost:8545'
var web3 = new Web3(new Web3.providers.HttpProvider(ether_port));
web3.eth.subscribe("pendingTransactions"
, function(err, result){
if (err){ console.log(err) }
else { console.log("result: ", result) }
});
我得到的结果是:
Error: The current provider doesn't support subscriptions: HttpProvider
at Subscription.subscribe
从某种意义上说并不奇怪,因为当我在node.js
控制台上订阅web3.eth.subscribe
时,我得到:
{ [Function] call: undefined }
尽管web3-1.0.0
的文档中说明了可以使用该函数:
n
几秒钟ping一次链正如错误所提示的,发布/订阅在HTTP上不可用。但是,您可以通过WS使用它。因此,您引用的文档并非100%错误,它只是省略了代码的提供者部分 尝试使用web套接字连接启动节点(
geth--ws--wsport 8545…
,假设您使用的是geth
),并更改为WebsocketProvider
var Web3 = require("web3");
var ether_port = 'ws://localhost:8545'
var web3 = new Web3(new Web3.providers.WebsocketProvider(ether_port));
web3.eth.subscribe("pendingTransactions"
, function(err, result){
if (err){ console.log(err) }
else { console.log("result: ", result) }
});
请参阅第4条评论。使用附加的JS控制台打开它的更好方法 您可以使用>geth attach“ipc路径”(即在我的示例中是/home/dev/.ethereum/geth.ipc)来连接它 之后,您将连接到正在运行的geth节点并使用管理API的。。现在你可以使用 admin.startWS(“本地主机”,“端口号”) 当你想关闭连接时,你可以使用下面的命令 admin.stopWS() 问候
Dev你能帮我找到在geth中打开websocket的正确方法吗。当执行
geth--identity“node”-nodiscover--maxpeers 0--datadir/path/to/data--networkid 123--ws--wsport 8546控制台
,然后尝试在节点中打开连接时,我得到了WARN[01-09 | 14:54:48]origin''在ws-RPC接口上不允许
。trygeth--identity“node”--nodiscover--maxpeers 0--datadir/path/to/data--networkid 123--ws--wsport 8545--wsaddr 0.0.0.0--wsorigins“*”控制台
。请注意,我使用端口8545匹配答案中的代码。很明显,你想用什么就用什么。啊,效果很好,谢谢。最后一个问题,为什么当我在浏览器中导航到ws://127.0.0.1:8546/
(我最终用于ws-port的地址)时,无法访问此站点。但我可以导航到http://127.0.0.1:8546/
当我打开http
端口时?我不确定。我从未尝试通过浏览器通过ws来点击它。我建议使用web套接字插件来获取更多信息。此外,您还可以同时启用JSON-RPC(HTTP)和WS-connections。只需在不同的端口上运行它们。我还应该提到,如果您需要访问eth/web3/net以外的LIB,并且对HTTP/WS有安全顾虑,那么您应该能够通过IPC进行发布/订阅。