无服务器WebSocket路由响应

无服务器WebSocket路由响应,websocket,aws-lambda,aws-api-gateway,serverless-framework,Websocket,Aws Lambda,Aws Api Gateway,Serverless Framework,我正在使用serverless创建WebSocket服务,为此,我能够使用serverless offline和部署的服务在本地成功触发我的WebSocket路由 我现在遇到的问题是如何响应那些WS事件 我能够使用AWS.ApiGatewayManagementApi.postToConnection响应本地WebSocket事件,尽管我似乎无法获得处理程序的return值来实际发送WebSocket事件作为响应,正如和建议的那样 serverless.yml路由: ws-custom: han

我正在使用
serverless
创建WebSocket服务,为此,我能够使用
serverless offline
和部署的服务在本地成功触发我的WebSocket路由

我现在遇到的问题是如何响应那些WS事件

我能够使用
AWS.ApiGatewayManagementApi.postToConnection
响应本地WebSocket事件,尽管我似乎无法获得处理程序的
return
值来实际发送WebSocket事件作为响应,正如和建议的那样

serverless.yml
路由:

ws-custom:
handler:handler.wsCustom
活动:
-websocket:
路线:海关
RouterResponseSelectionExpression:$default
处理程序:

module.exports.wsCustom=async(事件)=>{
const body=JSON.parse(event.body);
log('WebSocket`custom`event!',event!');
返回{
状态代码:200,
body:JSON.stringify({message:`Hello,${body.name}!`}),
};
}
在我的浏览器JavaScript中调用函数:

ws.send(JSON.stringify({'action':'custom','name':'kevbot');
结果是,my
serverless offline
日志(或部署项目的CloudWatch)将使用日志成功创建一个事件,但我的客户端不会收到任何响应事件。 有人知道我如何使用处理程序的返回值来实现这一点吗

编辑:


问题似乎存在于我的
无服务器脱机设置中。我将尝试让它在本地工作,并创建一个必要的问题。

当使用WebSocket API并尝试将集成的响应返回到客户端时,需要注意的一个重要问题,如下所述:

对于配置为使用
AWS_PROXY
LAMBDA_PROXY
集成的路由,通信是单向的,API网关不会自动将后端响应传递给路由响应。例如,在
LAMBDA_PROXY integration
的情况下,LAMBDA函数返回的主体将不会返回给客户端。如果希望客户端接收集成响应,则必须定义路由响应以实现双向通信

因此,如果使用代理集成,则无法将响应返回给客户端。您必须使用该方法来传递任何数据


或者,如果您使用的是非代理集成,那么您可以为您的集成设置一个代理。

这似乎只适用于HTTP API。似乎暗示了相反的情况:`对于代理集成,API网关会自动将后端输出作为完整的负载传递给调用方。没有集成响应。`请原谅格式不好……我创建了一个拉请求来解决无服务器脱机中的问题