AWS API Gateway Websocket не выдает, пока не исчезнет следующее сообщение - PullRequest
0 голосов
/ 21 сентября 2019

Я пытаюсь реализовать интеграцию Websocket с AWS API Gateway, и у меня возникает проблема, когда сообщения отправляются только после того, как сообщение отправлено впоследствии.Это происходит только тогда, когда я пытаюсь отправить сообщения на 2 или более соединений.

Они создаются как лямбды.

// Used in both examples
const client = new AWS.ApiGatewayManagementApi({
    apiVersion: '2018-11-29',
    endpoint: `https://${event.requestContext.domainName}/${event.requestContext.stage}`
});

try {
     await client
         .postToConnection({
            ConnectionId: event.requestContext.connectionId,
            Data: JSON.stringify({
               ConnectionId: event.requestContext.connectionId,
               body: event.body
            })
          })
           .promise();
} catch (err) {
    console.log(err)
}

Когда я тестирую его с помощью wscat -c CONNECTION_URL иотправьте тело с увеличивающимися цифрами, первый пример работает как ожидалось.Вывод:

> 1
< {"ConnectionId":"AV0G4fZ8joECG1g=","body":"1"}
> 2
< {"ConnectionId":"AV0G4fZ8joECG1g=","body":"2"}
> 3
< {"ConnectionId":"AV0G4fZ8joECG1g=","body":"3"}
> 4
< {"ConnectionId":"AV0G4fZ8joECG1g=","body":"4"}
> 5
< {"ConnectionId":"AV0G4fZ8joECG1g=","body":"5"}

Когда я включаю массив ConnectionIds, сопоставляю его с возвращаемым списком Promises и вызываю Promise.all [], вывод теперь на 1 позади текущего сообщения.WEIRD!


const results = [{ ConnectionId: 'AVzF9fbIDoECF-w=' }, { ConnectionId: 'AuUasddd-DoECJ-Q=' }]

const sendMessages = results.map(async ({ ConnectionId }) => {
        try {
            await client
                .postToConnection({
                    ConnectionId,
                    Data: JSON.stringify({
                        ConnectionId: ConnectionId,
                        body: event.body
                    })
                })
                .promise();
        } catch (err) {
            console.log(err)
        }
    })

try {
    await Promise.all[sendMessages]
} catch (err) {
    console.log(err)
}

Когда я делаю то же самое с инкрементными значениями, все сообщения отстают от последних на 1.Вывод:

> 1
> 2
< {"ConnectionId":"AVzF9fbIDoECF-w=","body":"1"}
> 3
< {"ConnectionId":"AVzF9fbIDoECF-w=","body":"2"}
> 4
< {"ConnectionId":"AVzF9fbIDoECF-w=","body":"3"}
> 5
< {"ConnectionId":"AVzF9fbIDoECF-w=","body":"4"}

Буду признателен за любую помощь специалиста или идеи о том, что может пойти не так

...