Solana实时监听(调用日志方法)链上信息

Solana官方文档API

WebSocket API
Websocket连接概述
accountSubscribe:订阅账号事件
accountUnsubscribe:取消订阅账号事件
logsSubscribe:订阅日志事件
logsUnsubscribe:取消订阅日志事件
programSubscribe:订阅程序事件
programUnsubscribe:取消订阅程序事件
signatureSubscribe:订阅签名事件
signatureUnsubscribe:取消订阅签名事件
slotSubscribe:订阅槽位事件
slotUnsubscribe:取消订阅槽位事件

安装包:

下载包
npm install --save express

npm install websocket

如果下载这监听的话:reconnecting  就会自带心跳机制不需从新加
(缺点只能TypeScript中使用)
npm install --save reconnecting-websocket
[reconnecting  具体使用方式](https://blog.csdn.net/m1s2q3l4/article/details/121556091?spm=1001.2014.3001.5501)

HTML页面实现方式:(获取的数据都是实时监听到的长链接)

<html>

<head>
    <!--加入下面这行代码避免出现中文乱码-->
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>
<div id="result"></div>
</body>
<script type="text/javascript">
	//想要监听的地址
    var socketUrl = `ws://api.devnet`;
    var socket = new WebSocket(socketUrl);
    //连接打开事件
    //订阅日志事件logsSubscribe
    //mentions这个参数相当于(交易号)
    socket.onopen = function() {
        console.log("Socket 已打开");
        let rpc = {
            jsonrpc: "2.0",
            id: 1,
            method: "logsSubscribe",
            "params": [
                {
                    "mentions": [ "Ef2FSTK4Jk7Yc3AiKoWhDrhdPdATTxPAngRRNSgDTdEY" ]
                },
                {
                    "commitment": "finalized"
                }
            ]
            //这个属于监听全部信息
            //"params": [ "all" ]
        }
        socket.send(JSON.stringify(rpc));
    };
    //收到消息事件
    socket.onmessage = function(msg) {
        console.log("接受到消息:" + msg.data);
        var result = document.getElementById("result").innerHTML;
        result = result + "<br/>接收消息:" + msg.data;
        document.getElementById("result").innerHTML = result;
    };
    //连接关闭事件
    socket.onclose = function() {};
    //发生了错误事件
    socket.onerror = function() {
        console.log("发生错误!");
    }
</script>

</html>

TypeScript:中的监听(加入了心跳检查(防止断联))
执行的方式是:node 文件名,执行成功效果
在这里插入图片描述

const W3CWebSocket = require('websocket').w3cwebsocket;

/**
 * https://docs.solana.com/developing/clients/jsonrpc-api
 *
 * websocket心跳重连机制
 * https://www.cnblogs.com/tugenhua0707/p/8648044.html
 */

//建立w3c标准的websocket对象,传入wss地址
// let client = new  W3CWebSocket('ws://solana.com')
// client.onerror = (e) =>{
//     console.log('回调函数');
//     console.log(e)
// };
// //收到消息的处理函数
// client.onmessage = (e)=> {
//     if (typeof e.data === 'string') {
//         var jsonData = JSON.parse(e.data)
//        //    console.log(jsonData) //打印全部信息
//         if (jsonData.params){
//             console.log("logs",jsonData.params.result.value.logs);
//         }
//         // if (jsonData.params){
//         //     console.log(jsonData.params.value.logs[1]);
//         // }
//
//     }
// };
// //链接打开的回调函数
// client.onopen =  () => {
//
//     console.log("发送订阅账号事件")
//
//     var str2 ={
//         "jsonrpc": "2.0",
//         "id": 1,
//         "method": "logsSubscribe",
//         "params": [ "all" ]
//     }
//     console.log("发送信息订阅日志信息")
//     client.send(JSON.stringify(str2));
// };
// //链接关闭的回调函数
// client.onclose = () =>{
//     console.log('关闭回调函数');
// };

var lockReconnect = false;//避免重复连接
var wsUrl = "ws://api.devne.com";
var ws;
var tt;
function createWebSocket(wsUrl) {
    try {
        ws = new  W3CWebSocket(wsUrl)
        init();
    } catch(e) {
        console.log('catch');
        reconnect(wsUrl);
    }
}
function init() {
    ws.onclose = function () {
        console.log('链接关闭');
        reconnect(wsUrl);
    };
    ws.onerror = function() {
        console.log('发生异常了');
        reconnect(wsUrl);
    };
    ws.onopen = function () {
        //心跳检测重置
        heartCheck.start();
    };
    ws.onmessage = function (e) {
        //拿到任何消息都说明当前连接是正常的
        console.log('接收到消息');
            if (typeof e.data === 'string') {
        var jsonData = JSON.parse(e.data)
       //    console.log(jsonData) //打印全部信息

        if (jsonData.params){
            console.log("logs",jsonData.params.result.value.logs);
        }
        // if (jsonData.params){
        //     console.log(jsonData.params.value.logs[1]);
        // }

    }
        heartCheck.start();
    }
}
function reconnect(url) {
    if(lockReconnect) {
        return;
    };
    lockReconnect = true;
    console.log("重连中...")
    //没连接上会一直重连,设置延迟避免请求过多
    tt && clearTimeout(tt);
    tt = setTimeout(function () {
        createWebSocket(wsUrl);
        lockReconnect = false;
    }, 4000);
}
//心跳检测
var heartCheck = {
    timeout: 3000,
    timeoutObj: null,
    serverTimeoutObj: null,
    start: function(){
        console.log('start');
        var self = this;
        this.timeoutObj && clearTimeout(this.timeoutObj);
        this.serverTimeoutObj && clearTimeout(this.serverTimeoutObj);
        this.timeoutObj = setTimeout(function(){
            //这里发送一个心跳,后端收到后,返回一个心跳消息,
            console.log("发送订阅账号事件")
            var str2 ={
                "jsonrpc": "2.0",
                "id": 1,
                "method": "logsSubscribe",
                "params": [ "all" ]
            }
            console.log("发送信息订阅日志信息")
            ws.send(JSON.stringify(str2));
            self.serverTimeoutObj = setTimeout(function() {
                console.log(ws);
                ws.close();
                // createWebSocket();
            }, self.timeout);

        }, this.timeout)
    }
}
createWebSocket(wsUrl);

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux上安装Solana的详细步骤如下: 1. 打开终端,并确保您具有管理员权限。 2. 添加Solana的软件包仓库。执行以下命令将Solana的软件包仓库添加到您的系统中: ```shell $ sh -c "$(curl -sSfL https://release.solana.com/v1.8.7/install)" ``` 这个命令将自动下载并安装Solana的软件包管理工具。 3. 验证软件包安装。执行以下命令验证Solana软件包管理工具是否正确安装: ```shell $ solana --version ``` 如果成功安装,您将看到Solana的版本信息。 4. 设置Solana环境变量。执行以下命令将Solana的二进制文件路径添加到环境变量中: ```shell $ echo "export PATH=\"/root/.local/share/solana/install/active_release/bin:$PATH\"" >> ~/.bashrc $ source ~/.bashrc ``` 这将确保您可以在任何目录中直接运行Solana命令行工具。 5. 启动Solana节点。执行以下命令启动一个本地的Solana节点: ```shell $ solana-test-validator ``` 这将启动一个本地的测试网络节点,并开始同步区块链数据。 6. 验证节点运行状态。执行以下命令验证Solana节点是否正常运行: ```shell $ solana status ``` 如果一切正常,您将看到节点的运行状态信息。 现在,您已经成功在Linux上安装并启动了Solana。您可以使用Solana命令行工具进行区块链开发和操作。请注意,这只是一个简单的本地测试网络,如果您需要连接到Solana的主网或其他网络,请参考Solana文档中的相关信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值