新しいブロックが取り込まれた通知を受け取る。
入門セクション を完了している
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
という名前の一意の文字列識別子が取得されます。 新しいブロックがハーベストされるたびに通知を受け取るために、次のステップではブロックチャネルを購読します。 ここ で利用可能なチャンネルのリストを確認してください。
接続フェーズ中に受信した 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
秒ごとに新しくハーベストされたブロックの内容を含む新しい通知を受け取ります。
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(() => ...