在后端服务中使用 @connections
命令
您后端服务可以使用以下 WebSocket 连接 HTTP 请求向连接的客户端发送回调消息、获取连接信息或断开客户端连接。
这些请求使用 IAM 授权,因此您必须使用签名版本 4 (SigV4) 对其进行签名。为此,您可以使用 API Gateway 管理 API。有关更多信息,请参阅 ApiGatewayManagementApi
在以下命令中,您需要将
替换为实际的 API ID,该 ID 显示在 API Gateway 控制台中或由 Amazon CLI {api-id}
create-api
命令返回。此外,如果您的 API 位于 us-east-1
以外的区域,则需要替换正确的区域。
要向客户端发送回调消息,请使用:
POST https://
{api-id}
.execute-api.us-east-1
.amazonaws.com/{stage}
/@connections/{connection_id}
您可以通过使用 Postman
或通过调用 awscurl
来测试此请求,如以下示例所示:
awscurl --service execute-api -X POST -d "hello world" https://
{prefix}
.execute-api.us-east-1
.amazonaws.com/{stage}
/@connections/{connection_id}
您需要对命令进行 URL 编码,如以下示例所示:
awscurl --service execute-api -X POST -d "hello world" https://
aabbccddee
.execute-api.us-east-1
.amazonaws.com/prod
/%40connections/R0oXAdfD0kwCH6w%3D
要获取客户端的最新连接状态,请使用:
GET https://
{api-id}
.execute-api.us-east-1
.amazonaws.com/{stage}
/@connections/{connection_id}
要断开客户端连接,请使用:
DELETE https://
{api-id
}.execute-api.us-east-1
.amazonaws.com/{stage}
/@connections/{connection_id
}
您可以通过在集成中使用 $context
变量来动态构建回调 URL。例如,如果您将 Lambda 代理集成与 Node.js
Lambda 函数一起使用,则可以按如下方式构建 URL 并向连接的客户端发送消息:
import { ApiGatewayManagementApiClient, PostToConnectionCommand, } from "@aws-sdk/client-apigatewaymanagementapi"; export const handler = async (event) => { const domain = event.requestContext.domainName; const stage = event.requestContext.stage; const connectionId = event.requestContext.connectionId; const callbackUrl = `https://${domain}/${stage}`; const client = new ApiGatewayManagementApiClient({ endpoint: callbackUrl }); const requestParams = { ConnectionId: connectionId, Data: "Hello!", }; const command = new PostToConnectionCommand(requestParams); try { await client.send(command); } catch (error) { console.log(error); } return { statusCode: 200, }; };