使用AWS創建WebSocket API的實時聊天應用程式

Find AI Tools
No difficulty
No complicated process
Find ai tools

使用AWS創建WebSocket API的實時聊天應用程式

目錄

  1. AWS WebSocket API的概述
  2. 建立WebSocket API
  3. 創建DynamoDB表
  4. WebSocket Connect Lambda 函數
  5. WebSocket Disconnect Lambda 函數
  6. WebSocket Send Lambda 函數
  7. 設置Lambda的環境變量和權限
  8. 建立API Gateway
  9. 使用Postman測試WebSocket API
  10. 常見問題解答 (FAQ)

AWS WebSocket API的概述

AWS WebSocket API是一種支持雙向通信的API,使用戶和後端可以在連接後互相發送消息。這種API常常被用於實時應用,如圖表廣播消息或實時儀表盤。

本文將介紹如何在AWS上使用API Gateway服務創建WebSocket API。我們將使用一個實時聊天應用程序作為示例,這個應用程序包含幾個組件,包括API Gateway服務本身、三個Lambda函數和一個DynamoDB表用於跟踪所有當前的連接。

讓我們開始進入AWS控制台並開始設置。


建立WebSocket API

首先,在AWS控制台中創建一個DynamoDB表,我們將使用它來存儲所有活動連接的連接ID。在創建表時,我們只需要存儲連接ID作為分區鍵,這些連接ID是由API Gateway自動生成的值。

接下來,讓我們進入Lambda控制台並創建三個Lambda函數:

WebSocket Connect Lambda 函數

WebSocket Connect Lambda 函數將在有新連接到API Gateway時被調用。我們將使用Python 3.9創建這個函數,代碼寫入DynamoDB表中。

import boto3

def lambda_handler(event, context):
    connection_id = event["requestContext"]["connectionId"]

    dynamodb = boto3.resource("dynamodb")
    table = dynamodb.Table("websocket_connections")

    table.put_item(Item={"connection_id": connection_id})

    return {"statusCode": 200, "body": "Connected"}

創建這個Lambda函數時,我們需要設置環境變量以存儲DynamoDB表的名稱。同樣地,我們還需要為Lambda設置權限,以便它能夠將項目放入DynamoDB表中。

WebSocket Disconnect Lambda 函數

WebSocket Disconnect Lambda 函數在有斷開連接的請求到達WebSocket API時被調用。我們將使用Python 3.9創建這個函數,代碼從DynamoDB表中刪除斷開的連接ID。

import boto3

def lambda_handler(event, context):
    connection_id = event["requestContext"]["connectionId"]

    dynamodb = boto3.resource("dynamodb")
    table = dynamodb.Table("websocket_connections")

    table.delete_item(Key={"connection_id": connection_id})

    return {"statusCode": 200, "body": "Disconnected"}

同樣地,我們需要為這個Lambda函數設置環境變量和權限,以存儲DynamoDB表的名稱和允許刪除項目的權限。

WebSocket Send Lambda 函數

WebSocket Send Lambda 函數是主要的函數,用於發送消息。我們將使用Python 3.9創建這個函數,代碼從DynamoDB表中獲取所有連接ID,並發送消息到每個連接。

import boto3

def lambda_handler(event, context):
    message = event["body"]

    dynamodb = boto3.resource("dynamodb")
    table = dynamodb.Table("websocket_connections")

    connections = table.scan()["Items"]

    for connection in connections:
        endpoint_url = f"https://{event['requestContext']['domainName']}/{event['requestContext']['stage']}"
        connection_id = connection["connection_id"]

        # 在這裡發送消息到每個連接
        # 使用endpoint_url和connection_id

    return {"statusCode": 200, "body": "Message Sent"}

同樣地,我們需要為這個Lambda函數設置環境變量和權限。環境變量用於存儲DynamoDB表的名稱,權限用於允許Lambda對DynamoDB進行掃描操作和向連接發送消息。


繼續設置Lambda的環境變量和權限後,我們可以創建API Gateway。

設置Lambda的環境變量和權限

在Lambda的配置界面中,你可以設置環境變量。我們需要設置一個環境變量來存儲DynamoDB表的名稱,以便我們在代碼中使用它。

同樣地,在Lambda的配置界面中,你可以更新權限。我們需要為Lambda設置兩個權限。首先,我們需要允許Lambda向DynamoDB表中添加項目。其次,我們需要允許Lambda對DynamoDB表進行刪除操作。

建立API Gateway

在API Gateway控制台中,選擇WebSocket API並創建一個新的API。你需要為它指定一個名稱,並設置路由選擇表達式。這將用於區分不同的請求,以便它們能夠被轉發到不同的Lambda函數。

在設置界面中,你可以創建幾個不同的路由,分別對應不同的Lambda函數。在每個路由中,你可以使用集成Lambda,集成模擬API或者創建自定義路由。

我們的示例中有三個路由:連接、斷開連接和發送消息。將它們分別與我們創建的三個Lambda函數相關聯。

最後,檢查所有的配置細節,包括API的名稱、路由選擇表達式、集成和Stage(我們將它設置為demo)。完成後,創建和部署API。

現在,你已經擁有了一個運行中的API Gateway。


使用Postman測試WebSocket API

在連接到API Gateway的網址中,你可以使用Postman或其他WebSocket客戶端進行測試。複製WebSocket URL並在Postman中連接。

每次在Postman中創建一個新的WebSocket連接時,你都可以在DynamoDB表中看到一個新的連接ID被創建。

你可以使用消息發送功能測試WebSocket API。在消息的body中,你需要指定一個動作(與我們在創建API時設置的路由名稱匹配),然後指定消息的內容。

舉個例子,在Terminal 1上,你可以發送一個消息:"action": "send_message", "message": "Hello from Terminal 1",然後在Terminal 2和Terminal 3上接收到這個消息。

同樣地,你可以從任何一個終端機發送消息,它們都會被其他終端機接收到。

你還可以根據需要添加其他屬性,並將消息發送到特定的終端機。


常見問題解答 (FAQ)

問:WebSocket API是用於什麼目的?

答:WebSocket API主要用於實時應用,可以實現雙向通信,如聊天應用、實時數據更新等。

問:我可以在同一個WebSocket API中創建多個路由嗎?

答:是的,你可以在同一個WebSocket API中創建多個路由,每個路由對應不同的功能。

問:我是否需要為Lambda函數設置權限?

答:是的,你需要為Lambda函數設置權限,以便它能夠訪問DynamoDB表並執行相應的操作。


這就是使用AWS API Gateway創建WebSocket API的過程。希望本文對你有所幫助。如果你對WebSocket API或其他AWS相關問題有任何疑問,請在下方留言。謝謝!


tableofcontents

Most people like

Are you spending too much time looking for ai tools?
App rating
4.9
AI Tools
100k+
Trusted Users
5000+
WHY YOU SHOULD CHOOSE TOOLIFY

TOOLIFY is the best ai tool source.