新しいブロックの監視

新しいブロックが取り込まれた通知を受け取る。

前提条件

方法 #01: WebSocket を使用する

1. First, we need to create a bidirectional link between our client application and the REST Gateway. To do so, open a new WebSocket connection connection. Remember to use a suitable NODE_URL.

import * as WebSocket from 'ws';

const host = 'NODE_URL';
const ws = new WebSocket('ws://' + host + '/ws');

ws.on('open', () => {
    console.log('Connection opened');
});

ws.on('close', () => {
    console.log('Connection closed');
});

ws.on('message', (msg) => {
    const response = JSON.parse(msg);
    if ('uid' in response) {
        console.log('uid:', response);
    } else {
        console.log(response);
    }
});

接続が開くと uid という名前の一意の文字列識別子が取得されます。 新しいブロックがハーベストされるたびに通知を受け取るために、次のステップではブロックチャネルを購読します。 ここ で利用可能なチャンネルのリストを確認してください。

  1. 接続フェーズ中に受信した uid と、次の形式のチャネル名を送信します。

ws.on('message', (msg) => {
    const response = JSON.parse(msg);
    if ('uid' in response) {
      const body = '{"uid":"' + response.uid +'", "subscribe":"block"}';
      console.log('uid:', response);
      ws.send(body);
    } else {
        console.log(response);
    }
});

その瞬間から 30 秒ごとに新しくハーベストされたブロックの内容を含む新しい通知を受け取ります。

方法 #02: SDK を使用する

Symbol SDK は WebSocket 接続の処理プロセスを簡素化します。

SDK では、WebSockets は リスナー と呼ばれます。WebSocket で行ったように、最初に接続を開き、目的のチャンネルを購読する必要がありますが、今回は uid を処理しません。

const nodeUrl = 'NODE_URL';
const repositoryFactory = new RepositoryFactoryHttp(nodeUrl);
const listener = repositoryFactory.createListener();

listener.open().then(() => {
  listener.newBlock().subscribe(
    (block) => {
      console.log(block);
      listener.close();
    },
    (err) => console.error(err),
  );
});
const nodeUrl = 'NODE_URL';
const repositoryFactory = new symbol_sdk_1.RepositoryFactoryHttp(nodeUrl);
const listener = repositoryFactory.createListener();
listener.open().then(() => {
    listener.newBlock().subscribe((block) => {
        console.log(block);
        listener.close();
    }, (err) => console.error(err));
});

Typescript ベースのリスナー用 Symbol SDK は Node.js バックエンド環境で動作するように設計されています。リスナーをクライアントサイド (例: Angular, React, Vue) で実行するには、WebSocket のブラウザ実装をリスナーに渡します。

const listener = new Listener('ws://ngl-dual-101.testnet.symboldev.network:3000', WebSocket);
listener.open().then(() => ...

方法 #03: CLI を使用する

ターミナルウィンドウを開き、次のコマンドを実行します。

symbol-cli monitor block