如何自动断开AWS API Gateway WebSocket?设置5分钟连接时长方案
AWS API Gateway WebSocket 5分钟自动断开的轻量解决方案
方案1:连接时预约异步断开任务(最推荐)
不用复杂的Step Functions,每个连接单独处理,资源消耗低:
- 在
$connect路由的Lambda里,连接成功后:- 记下当前的
connectionId。 - 用AWS SDK创建一个单次EventBridge调度任务,设置5分钟后触发,目标是一个专门负责断开连接的Lambda。调度任务的Payload里传入
connectionId。 - 断开Lambda的逻辑极简:调用API Gateway的
DeleteConnection接口,传入目标connectionId即可。
- 记下当前的
- 权限要配好:断开Lambda需要
execute-api:DeleteConnection权限;创建调度任务的Lambda需要events:PutSchedule权限。
方案2:客户端主动断开+服务端兜底
依赖客户端配合,实现最快且零额外服务成本:
- 客户端连接WebSocket后,启动5分钟定时器,到期主动关闭连接(或者发送断开请求到服务端)。
- 服务端在处理消息的路由(比如
$default或自定义消息路由)里,每次收到请求时,从DynamoDB(连接建立时存过连接时间)取出该连接的创建时间,若超过5分钟,直接调用DeleteConnection断开,防止客户端逻辑失效。
方案3:定时扫描DynamoDB(适合小流量场景)
如果连接量不大,这个方案最易上手:
$connect时把connectionId和当前时间戳写入DynamoDB表。- 创建CloudWatch Events规则,每分钟触发一次Lambda,扫描DynamoDB中所有超过5分钟的连接记录,逐个调用
DeleteConnection断开。 - 给扫描Lambda配置DynamoDB读取权限和API Gateway删除权限。
内容的提问来源于stack exchange,提问作者sayandcode
相关产品推荐
相关产品推荐

