【问题标题】:aws web-socket gateway taking much timeaws web-socket 网关需要很多时间
【发布时间】:2021-10-07 18:14:27
【问题描述】:

我正在使用 AWS Websocket api-gateway。我正在通过aws:execute-api:region:account-id:api-id/stage-name/POST/@connections 向连接的客户端发送消息。但是,消息以某种方式延迟,用户界面将无法立即接收聊天消息。我不知道为什么会出现任何错误的建议????

有一件事非常特别,当我发送消息时,最后一条消息得到时间。 示例:如果我发送了一条需要很长时间的消息。如果我发送第一条消息,就像我发送第二条消息一样,第一条消息将立即收到客户端,但现在第二条第二条消息需要很长时间。所以基本上当我发送第 n 条消息时,当发送第 (n+1) 条消息并且第 (n+1) 条消息需要很长时间才能传递时,每条 n 条消息都会传递给客户端。

非常感谢您的帮助!!!

这只是我拥有的代码片段

import * as AWS from 'aws-sdk';
export class AWSWebsocketGateway {
    websocketInstance;
    constructor() {
        AWS.config.update({
            accessKeyId: <accessKeyId>,
            secretAccessKey: <secretAccessKey>,
            region: <region>
        });
        this.websocketInstance = new AWS.ApiGatewayManagementApi({
            endpoint: <webSocketDomainName> + <webSocketStage>
        });
    }

    sendMessage(connection, messageObject, callback: Function) {

        messageObject = JSON.stringify(messageObject);
        this.websocketInstance.postToConnection({ ConnectionId: connection, Data: JSON.stringify(messageObject) }, function (error, data) {
            console.log('Error', error, 'Send Message...', data);
            return callback(error, data);
        });
    }
}

我在一个查询中从数据库中检索连接 ID,并在循环中调用此函数以发送消息。

【问题讨论】:

  • 您能否分享一些代码、日志和屏幕截图,以便我们为您提供帮助。
  • 我们需要更多信息和完整的代码示例
  • @Darkonekt 也发布了代码。
  • 我也面临同样的问题。有什么解决办法吗?

标签: amazon-web-services websocket aws-lambda aws-api-gateway


【解决方案1】:

对于其他被这个咬过的人->

在完成 lambda 的执行之前,您需要等待 API 调用返回结果。

例如这行不通

module.exports.ping = async (event) => {
  ... //setting up api gateway, etc
  apig.postToConnection({ ConnectionId: connectionId, Data: JSON.stringify(message) }, (err, res) => {})

  return {
    statusCode: 200
  }
}

但这会:

module.exports.ping = async (event) => {
  ... //setting up api gateway, etc
  await apig.postToConnection({ ConnectionId: connectionId, Data: JSON.stringify(message) }).promise();

  return {
    statusCode: 200
  }
}

在 lambda 返回后执行的任何异步代码似乎都会暂停,直到该处理程序再次运行,这就是您看到上面概述的延迟 n+ 问题的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 2020-03-19
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多