

# 第 1 步：在本地进行部署和测试
<a name="TicTacToe.Phase1"></a>

**Topics**
+ [1.1：下载和安装所需的软件包](#TicTacToe.Phase1.InstallApp)
+ [1.2：测试游戏应用程序](#TicTacToe.RunAppLocally)

在本步骤中，您将在本地计算机上下载、部署和测试井字游戏应用程序。您可以将 DynamoDB 下载到计算机上并在其中创建所需的表，而不是使用 Amazon DynamoDB Web 服务。

## 1.1：下载和安装所需的软件包
<a name="TicTacToe.Phase1.InstallApp"></a>

您需要以下软件包在本地测试此应用程序：
+ Python 
+ Flask（适用于 Python 的 microframework）
+ Amazon SDK for Python (Boto)
+ 在计算机中运行的 DynamoDB
+ Git 

要获取这些工具，请执行以下操作：

1. 安装 Python。如需分步说明，请参见[下载 Python](https://www.python.org/downloads/)。

   已经使用 Python 版本 2.7 对该井字游戏应用程序进行了测试。

1. 使用 Python Package Installer (PIP) 安装 Flask 和 Amazon SDK for Python (Boto)：
   + 安装 PIP。

     有关说明，请参见[安装 PIP](http://pip.readthedocs.org/en/stable/installing/)。在安装页面上，选择 **get-pip.py** 链接，接着保存该文件。然后，以管理员身份打开命令终端，并在命令提示符下输入以下内容。

     ```
     python.exe get-pip.py
     ```

      在 Linux 上，您不必指定 `.exe` 扩展名。只需指定 `python get-pip.py`。
   + 使用 PIP，通过以下代码安装 Flask 和 Boto 软件包。

     ```
     pip install Flask
     pip install boto
     pip install configparser
     ```

1. 将 DynamoDB 下载到您的计算机中。有关运行方法的说明，请参阅 [设置 DynamoDB local（可下载版本）](DynamoDBLocal.md)。

1. 下载井字游戏应用程序：

   1. 安装 Git。有关说明，请参阅 [git 下载](http://git-scm.com/downloads)。

   1. 运行下面的代码，下载应用程序。

      ```
      git clone https://github.com/awslabs/dynamodb-tictactoe-example-app.git
      ```

## 1.2：测试游戏应用程序
<a name="TicTacToe.RunAppLocally"></a>

要测试井字游戏应用程序，您需要在计算机上本地运行 DynamoDB。

**运行井字游戏应用程序**

1. 启动 DynamoDB。

1. 启动井字游戏应用程序的 Web 服务器。

   要执行此操作，请打开命令终端，导航到您将井字游戏应用程序下载到的文件夹，然后使用以下代码在本地运行此应用程序。

   ```
   python.exe application.py --mode local --serverPort 5000 --port 8000
   ```

   在 Linux 上，您不必指定 `.exe` 扩展名。

1. 打开您的 Web 浏览器，然后输入以下内容。

   ```
   http://localhost:5000/ 
   ```

   浏览器将显示主页。  
![应用程序主页的屏幕截图，其中包含创建按钮，以及游戏、邀请和最近历史记录的链接。](http://docs.amazonaws.cn/amazondynamodb/latest/developerguide/images/tic-tac-toe-ddb-local-play-5.png)

1. 在 **Log in (登录)** 框中输入 **user1**，以 user1 身份登录。
**注意**  
此示例应用程序不执行任何用户身份验证。用户 ID 仅用于标识玩家。如果两个玩家以同一别名登录，应用程序的工作方式就像您在两个不同的浏览器中玩游戏一样。

1. 如果您是第一次玩这款游戏，将显示一个页面，要求您在 DynamoDB 中创建所需的表 (`Games`)。选择 **CREATE TABLE (创建表)**。  
![应用程序中“创建表”按钮的屏幕截图。](http://docs.amazonaws.cn/amazondynamodb/latest/developerguide/images/tic-tac-toe-ddb-local-play-10.png)

1. 选择 **CREATE (创建)** 以创建第一个井字游戏。

1. 在 **Choose an Opponent (选择对手)** 框中输入 **user2**，然后选择 **Create Game\! (创建游戏！)**  
![显示“选择对手”对话框和“创建游戏”按钮的屏幕截图。](http://docs.amazonaws.cn/amazondynamodb/latest/developerguide/images/tic-tac-toe-ddb-local-play-20.png)

   执行此操作将通过在 `Games` 表中添加项目来创建游戏。它将游戏状态设置为 `PENDING`。

1. 打开另一个浏览器窗口，然后输入以下内容。

   ```
   http://localhost:5000/ 
   ```

   浏览器通过 Cookie 传递信息，因此，您应使用无痕模式或私密浏览，这样就不会传输您的 Cookie。

1. 作为 user2 登录。

   此时将显示一个页面，其中显示有一个来自 user1 的邀请等待接受。  
![显示带有待处理邀请的应用程序主页的屏幕截图。](http://docs.amazonaws.cn/amazondynamodb/latest/developerguide/images/tic-tac-toe-ddb-local-play-30.png)

1. 选择**接受**以接受邀请。  
![游戏状态为正在进行的空井字游戏网格的屏幕截图。](http://docs.amazonaws.cn/amazondynamodb/latest/developerguide/images/tic-tac-toe-ddb-local-play-40.png)

   游戏页面显示空的井字游戏网格。该页面还会显示相关的游戏信息，例如游戏 ID、发起游戏的用户以及游戏状态。

1. 玩游戏。

对于用户的每一次移动，Web 服务都会向 DynamoDB 发送请求，以在 `Games` 表中有条件地更新游戏项目。例如，条件可确保移动有效，用户选择的方框可用，以及轮到进行移动的用户。对于有效的移动，更新操作会添加与面板中的选择对应的新属性。更新操作还会将现有属性的值设置到可以进行下一次移动的用户。

在游戏页面上，应用程序每秒进行若干次异步 JavaScript 调用，持续时间最多达五分钟，以检查 DynamoDB 中的游戏状态是否已更改。如果游戏状态有更改，则应用程序使用新信息更新页面。五分钟之后，应用程序停止发出请求，您需要刷新页面以获取更新后的信息。