gpt4 book ai didi

java - AWS API Gateway WebSocket 超时?

转载 作者:行者123 更新时间:2023-12-01 16:54:28 29 4
gpt4 key购买 nike

如何防止具有 Lambda Java 后端的 API Gateway Websocket API 在 30 秒后超时?

AWS API Gateway 和 re:invent 视频提到使用 ping 或心跳来保持 Websocket 连接处于 Activity 状态,但我还没有找到直接的工作示例(在 Java 中)。前端使用 HTML 5 Websockets (vanilla javascript)。

我将我的 Lambda 测试驱动程序包含在 Java 中。如文档所述,它会导致 API Gateway WS API 在 30 秒后超时。如果消除延迟,司机将成功返回。如有任何帮助,我们将不胜感激...

import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
import com.fasterxml.jackson.databind.ObjectMapper;

public class TestWSClient implements RequestStreamHandler {

public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) {
try {
//
// How do we keep API Gateway from timing out after 30 seconds?
// Is something like this even needed in the lambda?
//
new Thread(() -> {
while(true) {
try {
// Ping client every 15 seconds
Thread.sleep(15000);
//outputStream.write(); // What to write -- 0x89 0x00?
outputStream.flush();
} catch(Exception e) { e.printStackTrace(); }
}
}).start();

//
// Simulate long processing time or streaming
//
// NOTE: commenting sleep enables service to return w/o a timeout
// connection from API Gateway
//
try { Thread.sleep(60000); } catch(Exception e) {}

var response = Map.of(
"statusCode", 200,
"headers", Map.of("Content-Type", "text/csv"),
"body", "Hello,World"
);

ObjectMapper om = new ObjectMapper();

outputStream.write(om.writeValueAsBytes(response));
outputStream.flush();
} catch(Exception e) { e.printStackTrace(); }
finally { try { outputStream.close(); } catch(Exception e) {} }
}
}

最佳答案

我认为我没有正确理解你的问题,但根据我的经验,WebSocket API 是如何工作的。客户端 <-(1)-> API 网关 <-(2)-> Lambda

1) 是 Web 套接字连接,最多保持打开状态 2 小时,空闲超时为 10 分钟,如此处所述。 https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html

2 ) 使用@connection https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-how-to-call-websocket-api-connections.html 管理通信

我相信您想使用 @connection 从 lambda 与您的 API 网关对话。

关于java - AWS API Gateway WebSocket 超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61617193/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com