问题的根本原因是WebSocket协议不支持body/payload。因此,当您不选择代理集成且使用请求模板时,由于API网关要等待它的所有body/payload被设置之后才会传递消息,因此,连接会失败。
为解决这个问题,您可以使用AWS API网关的WebSocket集成中添加转换Lambda函数来解析WebSocket消息并将其转换为WebSocket支持的标准格式。然后,您可以在Lambda函数中使用API网关管理的请求和响应模板,以便在消息传递过程中进行转换。以下是一个Lambda函数示例:
import json
import boto3
def lambda_handler(event, context):
message = json.loads(event['body'])
# do something with the message
return {
'statusCode': 200,
'body': json.dumps({'message': 'success'})
}
然后,您可以将WebSocket集成的Integration Type设置为Lambda,并在Integration Request设置中指定以上Lambda函数名称。最后,确保在请求模板中添加一个空模板。
这样,您就可以成功将消息传递到Lambda函数,并使用请求和响应模板进行转换,从而使WebSocket协议与AWS API Gateway兼容。