练习 - 分析基于轮询的 Web 应用的限制

已完成

在更改原型之前,需要运行它来验证假设。 原型位于 GitHub 上的源代码存储库中。

创建 Azure 资源

  1. 在单独的浏览器选项卡或窗口中,使用以下链接分叉 GitHub 上的示例存储库:mslearn-advocates.azure-functions-and-signalr。 这样,就可以将更改推送到自己的源代码版本。 这是一个必需的步骤,用于稍后在模块中将源代码部署到 Azure。

  2. 在终端中,克隆存储库。 在以下命令中,将 MicrosoftDocs 替换为帐户:

    git clone https://github.com/MicrosoftDocs/mslearn-advocates.azure-functions-and-signalr stock-prototype
    
  3. 在“setup-resources”文件夹中安装依赖项。

    cd stock-prototype/setup-resources && npm install
    

    如果收到有关 EBADENGINE 的警告,可以忽略它们。

  4. 通过 Azure CLI 登录 Azure。

    az login
    
  5. 查看订阅并设置默认的 Azure 订阅。

    查看订阅。

    az account list --output json | jq -r '.[] | .name' | sort
    

    若要设置默认订阅,请将 YOUR-SUBSCRIPTION-ID 替换为上一 Azure CLI 输出中的订阅 ID。

    az account set --subscription <YOUR-SUBSCRIPTION-ID>
    

    此默认订阅用于创建 Azure 资源。

  6. 创建 Azure 资源并将示例数据上传到数据库。 此过程可能需要几分钟才能完成。

    bash create-start-resources.sh "<YOUR-SUBSCRIPTION-NAME>"
    

    请确保用双引号引用名称。

  7. 复制所需的信息,需要这些信息才能运行原型。

    资源类型 环境变量
    Azure Cosmos DB 称为 COSMOSDB_CONNECTION_STRING
    Azure 存储 称为 STORAGE_CONNECTION_STRING
    资源组 称为 RESOURCE_GROUP_NAME。
  8. 使用 Node.js 脚本通过以下命令将示例数据上传到数据库中。

    npm start
    
  9. 在终端中,导航到文件夹。

    cd ..
    

安装依赖项并运行原型

  1. 安装依赖项。

    cd start/client && npm install && cd ../..
    cd start/server && npm install && cd ../..
    
  2. 如果通知要求你为工作区选择 Azure Functions 应用,请选择 start/server。 这是用于运行服务器端代码的函数应用。

  3. 如果收到有关安装最新 Azure Functions Core Tools 的通知,请选择“安装”

获取客户端和服务器 URL

在本地运行时,客户端和服务器应用程序需要知道在何处查找对方。 URL 为:

  • 客户端:http://localhost:3000
  • 服务器:http://localhost:7071

更新 Azure Functions 应用的本地设置

将连接字符串添加到原型的 Azure Functions 应用。

  1. 创建 ./start/server/local.settings.json 文件并粘贴以下内容。 此文件具有本地函数项目的配置设置。

    {
      "IsEncrypted": false,
      "Values": {
        "AzureWebJobsStorage": "<STORAGE_CONNECTION_STRING>",
        "FUNCTIONS_WORKER_RUNTIME": "node",
        "AzureWebJobsFeatureFlags": "EnableWorkerIndexing",
        "COSMOSDB_CONNECTION_STRING": "<COSMOSDB_CONNECTION_STRING>"
      },
      "Host" : {
        "LocalHttpPort": 7071,
        "CORS": "http://localhost:3000",
        "CORSCredentials": true
      }
    }
    
  2. 使用从上面复制的值更新以下变量。

    属性 Value
    AzureWebJobsStorage 替换为存储连接字符串。
    COSMOSDB_CONNECTION_STRING 替换为 Cosmos DB 连接字符串。

    现在,Functions 应用可以接收来自客户端的请求,然后连接到数据库并正确管理计时器触发器。

为客户端应用添加本地设置

将服务器 URL 添加到原型的客户端应用程序。

打开 ./start/client,并创建包含以下内容的 .env 文件。

BACKEND_URL=http://localhost:7071

运行服务器应用程序

  1. 在终端中,启动 Azure Functions 应用程序。

    cd start/server && npm start
    
  2. 等待终端显示 API 终结点。

    Functions:
    
            getStocks: [GET] http://localhost:7071/api/getStocks
    
            setPrice: timerTrigger
    

运行客户端应用程序

  1. 在新终端中,启动客户端应用程序。

    cd start/client && npm start
    
    
  2. 当通知显示应用程序正在运行时,请选择“在浏览器中打开”以使用原型。

    用于打开浏览器的 Visual Studio Code 通知的屏幕截图。

  3. 排列浏览器窗口,以便同时查看股票价格的终端和原型。

  4. 在原型浏览器窗口中,打开浏览器的开发人员工具。 请注意,浏览器每隔 5 秒向 API 发出一次请求,即使数据未更改也是如此。

  5. 在浏览器窗口中,监视 Azure Functions 应用的输出。 每分钟一次股票价格都会变化。 当 API 中的价格发生更改时,下一个客户端提取所有数据包括该更改。

    Visual Studio Code 终端的屏幕截图,其中显示了股票价格更改的控制台输出。

  6. 在启动客户端和启动服务器终端中,使用 Ctrl + C 按键组合停止应用程序,或通过选择垃圾桶图标来终止终端。

在本单元中,你运行了原型。 虽然客户端确实成功运行,但效率并不高。 虽然在股票数量较少的情况下,每个客户可能不会注意到这一点,但随着股票数量的增加和从服务器上提取的客户数量的增多,情况就会发生变化。 可以改进原型。 让我们在下一单元中了解操作方法。