gpt4 book ai didi

javascript - 如何使用 AWS Lambda 中的 websockets 将响应发送回客户端

转载 作者:行者123 更新时间:2023-11-30 19:11:52 25 4
gpt4 key购买 nike

我正在使用无服务器框架将 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 时,我都没有收到任何响应。

最佳答案

问题出在我的 lambda 上,它出现在自定义 VPC 中,导致 lambda 无法访问互联网。

我通过在 AWS 中使用 NAT 网关添加额外的子网来解决这个问题。

关于javascript - 如何使用 AWS Lambda 中的 websockets 将响应发送回客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58382945/

25 4 0