#amazon-web-services #websocket #aws-api-gateway
#amazon-веб-сервисы #веб-сокет #aws-api-gateway
Вопрос:
Мы внедрили веб-сокет API Gateway (с бессерверной AWS Lambda), и он работает хорошо. Однако мы столкнулись с критической проблемой, описанной ниже, и были бы очень признательны, если кто-нибудь сможет предоставить решение / обходной путь:
Мы хотим синхронизировать время сервера со временем клиента / javascript и хотели использовать веб-сокеты AWS API gateway для отправки временных меток всем подключенным клиентам через регулярные промежутки времени. Однако мы обнаружили, что без действия ввода от клиента мы не можем автоматически отправлять данные клиентам. Существует ли какой-либо обходной путь / исправление этой проблемы?
Заранее спасибо,
Комментарии:
1. Неясно, что вы подразумеваете под «автоматической отправкой данных клиентам» . Вы можете отправлять данные подключенным клиентам спонтанно (не в ответ на событие клиента), конечно… но что означает «автоматически»?
2. Команда AWS подтвердила, что это ограничение в чистой бессерверной среде, но предложила использовать CloudWatch для периодического запуска функции lambda, которая устранила проблему, спасибо.
Ответ №1:
Вы можете сделать это, используя URL-адрес подключения вашего WebSocket API. URL-адрес подключения выглядит как https://{api-id}.execute-api.{region}.amazonaws.com /{этап}.
Для отправки данных подключенным клиентам вы можете использовать операцию postToConnection API управления шлюзом Amazon API(). Вот ссылка: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/ApiGatewayManagementApi.html#getConnection-property
var params = {
ConnectionId: 'STRING_VALUE', /* required */
Data: Buffer.from('...') || 'STRING_VALUE' /* Strings will be Base-64 encoded on your behalf */ /* required */
};
apigatewaymanagementapi.postToConnection(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});