本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
管理連線使用者和用戶端應用程式:$connect
和$disconnect
路由
以下部分說明如何使用$connect
和$disconnect
路由 WebSocket API。
$connect
路由
用戶端應用程式會 WebSocket API透過傳送 WebSocket 升級要求連線到您的。如果請求成功,會在建立連線的同時執行 $connect
路由。
因為 WebSocket 連線是可設定狀態的連線,因此您只能在$connect
路由上設定授權。 AuthN
/AuthZ
將僅在連接時間進行。
在與 $connect
路由關聯的整合執行完成後,升級請求會處於等待中,且將不會建立實際的連線。如果 $connect
請求失敗 (例如,由於 AuthN
/AuthZ
故障或整合故障),將不會進行連線。
注意
如果在進行 $connect
時授權失敗,就不會建立連線,用戶端將會收到 401
或 403
回應。
為 $connect
設定整合是選用的。您應在以下情況考慮設定 $connect
整合:
-
您想要讓用戶端使用
Sec-WebSocket-Protocol
欄位來指定子通訊協定。如需範例程式碼,請參閱設置需要子協議的$connect WebSocket 路由。 -
您希望在用戶端連線時收到通知。
-
您想要調節連線或控制連線的人員。
-
您希望後端使用回調將消息發送回客戶端URL。
-
您想將每個連線 ID 和其他資訊放到資料庫 (例如,Amazon DynamoDB)。
從 $connect
路由傳遞連線資訊
您可以同時使用代理和非代理整合,將資訊從 $connect
路由傳遞至資料庫或其他 AWS 服務。
使用代理整合傳遞連線資訊
您可以從事件中的 Lambda 代理整合存取連線資訊。使用另一個 AWS 服務 或 AWS Lambda 函數發佈到連接。
下列 Lambda 函數顯示如何使用 requestContext
物件來記錄連線 ID、網域名稱、階段名稱和查詢字串。
使用非代理整合傳遞連線資訊
-
您可以透過非代理整合存取連線資訊。設定整合要求並提供要 WebSocket API求範本。下列 Velocity 範本語言 (VTL)
對應範本提供整合要求。此要求會將下列詳細資訊傳送至非 Proxy 整合: -
連線 ID
-
網域名稱
-
階段名稱
-
路徑
-
標頭
-
查詢字串
此要求會將連線 ID、網域名稱、階段名稱、路徑、標頭和查詢字串傳送至非 Proxy 整合。
{ "connectionId": "$context.connectionId", "domain": "$context.domainName", "stage": "$context.stage", "params": "$input.params()" }
如需設定資料轉換的詳細資訊,請參閱 API Gateway 中 WebSocket API 的資料轉換。
如要完成整合請求,請設定整合回應的
StatusCode: 200
。若要深入瞭解如何設定整合回應,請參閱 使用API閘道主控台設定整合回應。 -
$disconnect
路由
$disconnect
路由會在連線關閉後執行。
連線可以由伺服器或用戶端關閉。由於連接在執行時已經關閉,$disconnect
是一個最佳努力的事件。APIGateway 會盡力將$disconnect
事件傳送至您的整合,但無法保證傳送。
後端可以使用啟動中@connections
API斷連線。如需詳細資訊,請參閱 在後端服務使用 @connections 命令。