我正在使用serverless创建一个WebSocket服务,为此我能够在本地、使用serverless-offline和为已部署的服务成功地触发我的WebSocket路由。
我现在面临的问题是响应那些WS事件。
我能够使用AWS.ApiGatewayManagementApi.postToConnection来响应本地WebSocket事件,尽管我似乎无法像这些无服务器离线文档和这些AWS文档建议的那样,获得处理程序的return值来实际发送WebSocket事件。
serverless.yml路线:
ws-custom:
handler: handler.wsCustom
events:
- websocket:
route: custom
routeResponseSelectionExpression: $default处理程序:
module.exports.wsCustom = async (event) => {
const body = JSON.parse(event.body);
console.log('WebSocket `custom` event!', event);
return {
statusCode: 200,
body: JSON.stringify({ message: `Hello, ${body.name}!` }),
};
}调用浏览器JavaScript中的函数:
ws.send(JSON.stringify({ 'action': 'custom', 'name': 'kevbot' }));结果是,我的serverless-offline日志(或者在已部署的项目中使用CloudWatch )将成功地创建一个带有日志的事件,但是我的客户端将不会收到任何响应事件。有人知道我如何用处理程序的返回值来完成这个任务吗?
编辑:
这个问题似乎存在于我的serverless-offline设置中。我将尝试使它在当地发挥作用,并将创造一个必要的问题。
发布于 2020-06-07 06:52:34
在使用WebSocket API并尝试将集成的响应返回给客户端时,要注意的一个要点,如本文档中所提到的:
对于配置为使用
AWS_PROXY或LAMBDA_PROXY集成的路由,通信是单向的,API网关不会自动将后端响应传递到路由响应。例如,在LAMBDA_PROXY integration的情况下,Lambda函数返回的主体将不会返回给客户机。如果希望客户端接收集成响应,则必须定义路由响应以使双向通信成为可能。
因此,如果使用代理集成,则不能将响应返回给客户端。您必须使用AWS.ApiGatewayManagementApi.postToConnection方法来通信任何数据。
或者,如果您使用非代理集成,则可以为您的集成设置一个路由响应。
https://stackoverflow.com/questions/62240072
复制相似问题