Solidity
為什麼 Web3j 每 15 秒監聽一次事件?
我在我的 Java 應用程序中使用 web3j。在智能合約中,定義了一個事件。
event sendEvent(string name);
我在我的應用程序中訂閱了該事件。
contract.sendEventEventFlowable(filter) .subscribe(doc -> { System.out.println(doc.name); }, throwable -> { throwable.printStackTrace(); }, () -> { System.out.println("End of research"); });
它有效,但我注意到 Web3j 每 15 秒監聽一次區塊鏈。
這不適合我的應用程序,我需要一直傾聽區塊鏈內部發生的事情。
如何更改預設值(15 秒)?
這是我的程式碼
WebSocketService ws = new WebSocketService("ws://localhost:8545", true); ws.connect(); web3 = Web3j.build(ws);
在乙太坊主網上,每 15 秒生成一個區塊。這就是為什麼 15 是事件的預設值。但是您可以使用此建構方法來更改它:
/** * Construct a new Web3j instance. * * @param web3jService web3j service instance - i.e. HTTP or IPC * @param pollingInterval polling interval for responses from network nodes * @param scheduledExecutorService executor service to use for scheduled tasks. <strong>You are * responsible for terminating this thread pool</strong> * @return new Web3j instance */ static Web3j build( Web3jService web3jService, long pollingInterval, ScheduledExecutorService scheduledExecutorService) { return new JsonRpc2_0Web3j(web3jService, pollingInterval, scheduledExecutorService); }
我在這個關於慢事件 的問題中發現了這一點https://github.com/web3j/web3j/issues/233以及引用此方法的答案和連結 https://github.com/web3j/web3j/blob/master/core /src/main/java/org/web3j/protocol/Web3j.java#L17