Solana提供了一个基于Websocket的发布/订阅RPC接口,你可以在其中监听某些事件。你无需每隔一段时间ping一个HTTP端点来获取频繁的更新,而是可以只在更新事件发生时接收这些更新。
当你创建新的连接(Connection)实例时,Solana的web3 Connection 会生成一个websocket端点并注册一个websocket客户端(请参阅此处的源代码)。
Connection类公开了发布pub/订阅sub方法 – 它们都以on开头,就像事件发射器一样。当你调用这些监听器方法时,它会向该Connection实例的websocket客户端注册一个新的订阅。下面我们使用的示例发布/订阅方法是onAccountChange。回调将通过参数提供更新的状态数据(请参阅AccountChangeCallback作为示例)。
/* subscribe-to-events.ts */
import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
(async () => {
// 建立到开发网devnet的新连接 - 连接到开发网devnet的websocket客户端也在此处注册
const connection = new Connection(clusterApiUrl("devnet"), "confirmed");
// 创建一个测试钱包来监听事件
const wallet = Keypair.generate();
// 注册一个回调函数来来监听这个钱包的账户变化信息(即websocket订阅)
connection.onAccountChange(
wallet.publicKey,
(updatedAccountInfo, context) =>
console.log("Updated account info: ", updatedAccountInfo),
"confirmed",
);
})();
参考