AWS API Gateway Web Socket Api - широковещательное сообщение всем подключенным клиентам - PullRequest
2 голосов
/ 02 мая 2019

Я создал Web Socket Api с использованием API-шлюза и могу подключать к нему клиентов.

Кроме того, я могу отправлять сообщения подключенному клиенту, указав его ConnectionIdи используя следующий код:

const AWS = require('aws-sdk');
let apiGatewayManagementApi = new AWS.ApiGatewayManagementApi({
  apiVersion: '2018-11-29',
  endpoint: 'https://XXXXXXXXX.execute-api.sa-east-1.amazonaws.com/dev/',
  region: 'sa-east-1'
});
const params = {
  ConnectionId: 'YYYYYYYYYYYYY',
  Data: 'test'
};
apiGatewayManagementApi.postToConnection(params, function (err, data) {
  if (err) {
    console.log(err, err.stack); // an error occurred
  } else {
    console.log(data);           // successful response
  }
});

Проблема в том, что у меня нет необходимости проводить различие между клиентами, и поэтому я не хочу отслеживать идентификатор каждого клиента, но если я удаляюпри отправке сообщения я получаю следующую ошибку: Missing required key 'ConnectionId' in params

Можно ли отправить сообщение всем подключенным клиентам (без указания идентификатора подключения)?

1 Ответ

2 голосов
/ 02 мая 2019

К сожалению, вы должны указать ConnectionId .Шаблон, который я видел, - это сохранение информации о соединении с DynamoDB при событии $connect;тогда вы могли бы сделать что-то вроде этого:

const connections = await getAllConnections();
const promises = connections.map(c => apiGwMgmtApi.postToConnection({ ConnectionId: c.connectionId, Data: 'test' }).promise());
await Promise.all(promises);
...