首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无服务器WebSocket路由响应

无服务器WebSocket路由响应
EN

Stack Overflow用户
提问于 2020-06-07 02:03:20
回答 1查看 1.1K关注 0票数 2

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

我现在面临的问题是响应那些WS事件。

我能够使用AWS.ApiGatewayManagementApi.postToConnection来响应本地WebSocket事件,尽管我似乎无法像这些无服务器离线文档这些AWS文档建议的那样,获得处理程序的return值来实际发送WebSocket事件。

serverless.yml路线:

代码语言:javascript
复制
  ws-custom:
    handler: handler.wsCustom
    events:
      - websocket:
          route: custom
          routeResponseSelectionExpression: $default

处理程序:

代码语言:javascript
复制
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中的函数:

代码语言:javascript
复制
ws.send(JSON.stringify({ 'action': 'custom', 'name': 'kevbot' }));

结果是,我的serverless-offline日志(或者在已部署的项目中使用CloudWatch )将成功地创建一个带有日志的事件,但是我的客户端将不会收到任何响应事件。有人知道我如何用处理程序的返回值来完成这个任务吗?

编辑:

这个问题似乎存在于我的serverless-offline设置中。我将尝试使它在当地发挥作用,并将创造一个必要的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-07 06:52:34

在使用WebSocket API并尝试将集成的响应返回给客户端时,要注意的一个要点,如本文档中所提到的:

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

因此,如果使用代理集成,则不能将响应返回给客户端。您必须使用AWS.ApiGatewayManagementApi.postToConnection方法来通信任何数据。

或者,如果您使用非代理集成,则可以为您的集成设置一个路由响应

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62240072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档