javascript - AWS API Gateway Web Socket Api - 向所有连接的客户端广播消息
问题描述
我使用 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)?
解决方案
不幸的是,您必须指定 ConnectionId。我见过的一种模式是在$connect
事件中将连接信息持久化到 DynamoDB;那么你可以做这样的事情:
const connections = await getAllConnections();
const promises = connections.map(c => apiGwMgmtApi.postToConnection({ ConnectionId: c.connectionId, Data: 'test' }).promise());
await Promise.all(promises);
推荐阅读
- c# - Unity ARFoundation 图像跟踪预制位置
- testing - 单击锚标记不会导航到目标目的地
- github - 在 Github 上托管 Forge Autodesk 查看器
- java - 如何在 Java 中创建关联数组结构并进行排序,同时保留具有不同值对的重复键
- javascript - 通过参数捕获错误的函数,我们将其作为参数
- angular - 我们如何为角度的动态表单字段分配字头?
- powerbuilder - Appeon Mobile - 从 URL 下载文件
- python - Conda 安装包 ModuleNotFoundError:没有名为“conda”的模块
- c# - Azure REST Api 创建经典部署模型存储帐户
- amazon-web-services - 如何在单个 AWS EC2 实例中部署多个 Springboot 微服务