AWS API Gateway Web套接字Api-向所有连接的客户端广播消息

时间:2019-05-02 03:12:23

标签: javascript websocket aws-lambda aws-sdk aws-api-gateway

我已经使用API​​ Gateway创建了Web Socket 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
  }
});

问题是我不需要区分客户端,因此我不想跟踪每个客户端的ConnectionId,但是如果在发送消息时将其删除,则会出现以下错误: Missing required key 'ConnectionId' in params

是否可以向所有连接的客户端发送消息(不指定任何ConnectionId)?

1 个答案:

答案 0 :(得分:2)

很遗憾,you have to specify the ConnectionId。我看到的一种模式是在$connect事件上持久保留与DynamoDB的连接信息;那么您可以执行以下操作:

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