伝説のどいつまの伝説~失敗編~

岩美に永住したい新米エンジニアのあれやこれやな話。

【1 人アドベントカレンダー 2020】第 15 日目

だいぶアドベントカレンダーの趣旨からは外れてしまいますが、今年も 1 人アドベントカレンダー実施することにしました。
25 日まで毎日更新頑張ります!
qiita.com

今日の項目内容

Azure Functions と SignalR Service を使って、Web アプリケーションの自動更新を有効にする

  • ポーリングベースの Web アプリの制限事項を分析する
  • 演習 - ポーリングベースの Web アプリの制限事項を分析する
  • SignalR Service を使って Web アプリケーションの自動更新を有効にする
  • 演習 - SignalR Service を使用して Web アプリケーションの自動更新を有効にする

学習内容まとめ

ポーリングベースの Web アプリの制限事項を分析する

ポーリングは、主となるシステムが他のシステムに対して一定間隔で順繰りに要求がないか尋ねる制御方法。
ここでは、株式情報の読み取りプログラムを例に構成を考えていく。

サーバー

株価情報は Azure CosmosDB に格納される。
HTTP 要求にてトリガーされ、バインディングを使用してデータベースのコンテンツを返却する。
このバインディングfunction.json ファイルで構成される。

{
  "bindings": [
    {
      "type": "httpTrigger", // 関数を HTTP によってトリガーされる関数として定義する
      "authLevel": "anonymous", // 認証されていない受信要求を許可する
      "direction": "in", // 認証されていない受信要求を許可する
      "name": "req", //  req というパラメータを通じて要求コンテキストを公開する
      "methods": ["get"] // GET 要求を受入
    },
    {
      "type": "http", // 関数で HTTP 応答を返す
      "direction": "out", // 関数で HTTP 応答を返す
      "name": "res" // res という名前のパラメータを通じて応答コンテキストを公開
    },
    {
      "type": "cosmosDB", // 関数呼び出し時、CosmosDB データを使用できるようにする
      "direction": "in", // 関数呼び出し時、CosmosDB データを使用できるようにする
      "name": "stocks", // stock というパラメータを通じて、関数にデータを公開
      "ConnectionStringSetting": "AzureCosmosDBConnectionString", // 接続文字列を使用して CosmosDB データに接続する
      "databaseName": "stocksdb", // stockdb データベースをポイントする
      "collectionName": "stocks" // stocks データコレクションをポイントする
    }
  ]
}

演習 - ポーリングベースの Web アプリの制限事項を分析する

サンドボックスを用いて演習を行う。
f:id:d01tsumath:20201215110640p:plain
f:id:d01tsumath:20201215110923p:plain

SignalR Service を使って Web アプリケーションの自動更新を有効にする

ポーリングから、接続されているクライアントにデータ更新をプッシュするアプリに移行する。
この設計では、トラフィックが減り、データが変更されたときにのみ更新することで効率的な UI を作成することができる。
これを、 Azure CosmosDBAzure FunctionsSignalR を用いて実装する。
ポーリングと対照に好ましい設計は、クライアントとサーバー間の永続的な接続。
永続的な接続の利点としては、サーバーでは自由にクライアントにデータをプッシュできる点にある。これにより、ネットワークトラフィックとサーバーへの負荷が軽減される。

演習 - SignalR Service を使用して Web アプリケーションの自動更新を有効にする

サンドボックスを用いて演習を行う。

本日の内容は以上です。