Я использую Serverless Framework для развертывания приложения WebSocket на AWS Lambda.
Мне нужно, чтобы он отправлял ответ клиенту при достижении маршрута WebSocket.
Здесьмой обработчик:
const AWS = require("aws-sdk");
module.exports.websocketHandler = async (event, _) => {
const {
requestContext: { routeKey }
} = event;
switch (routeKey) {
case "$connect":
// ....
break;
case "$disconnect":
// ....
break;
case "getBot":
const body = JSON.parse(event.body);
const postData = body.data;
const params = {
ConnectionId: event.requestContext.connectionId,
Data: JSON.stringify(postData)
};
postMessage(params, event);
break;
case "$default":
default:
return { statusCode: 200 };
}
return { statusCode: 200 };
};
const postMessage = async (data, event) => {
try {
const apigwManagementApi = new AWS.ApiGatewayManagementApi({
apiVersion: "2018-11-29",
`https://${event.requestContext.domainName}/${event.requestContext.stage}`
});
await apigwManagementApi.postToConnection(data).promise();
} catch (err) {
console.log(err);
}
};
Он просто отвечает тем, что было отправлено. Я использую инструмент wscat
для подключения к WebSocket.
wscat -c wss://{API-ID}.execute-api.{REGION}.amazonaws.com/dev
{"action": "getBot", "data": "Hello world"}
Я пробовал тестировать его в автономном режиме, и он работает просто отлично. А после развертывания я могу подключиться к нему, но всякий раз, когда я пытаюсь отправить действие getBot, я не получаю ответа.