我遇到了这个问题:
我知道可以在ELB设置中增加超时,但不仅我的系统管理员反对它,它也是一个错误的解决方案,也是不好的做法。
我知道解决问题的最佳方法是通过套接字发送数据,以“告诉ELB”我仍然活跃。由于我们的体系结构以及会话被锁定的事实(即,我们不能从同一会话中获得并发的AJAX请求,否则一个待处理直到另一个完成),每30秒向服务器发送一个虚拟请求不起作用< / p>
我尝试对服务器上的文件执行get请求,但它没有什么区别,我认为“socket”是原始AJAX调用使用的那个。
服务器上的功能非常线性,几乎不可能在多个调用中分开,让它在后台运行并每隔5秒检查一次,直到完成为止让我在资源控制方面感到不舒服。
TL; DR:在AJAX请求待处理时,是否有任何优雅而有效的解决方案来维持套接字活动?
非常感谢,如果有人可以帮忙解决这个问题,我在SO上发现了几个类似的问题,但两者都是通过“致电亚马逊团队要求他们增加设置中的超时”来回答的,这对我来说非常糟糕。< / p>
答案 0 :(得分:0)
另一种方法是将整个操作划分为两个服务:
由于您使用AJAX来呼叫服务器端,因此当第一个服务成功完成时,您可以轻松更改javascript并调用第二个服务。这适用于您的场景吗?
答案 1 :(得分:-1)
您是否尝试过关注trouble shooting guide of ELB?引用下面的相关部分:
HTTP 504:网关超时
描述:表示负载均衡器关闭了连接 因为请求未在空闲超时期限内完成。
原因1:应用程序响应时间比配置时间长 空闲超时。
解决方案1:监控HTTPCode_ELB_5XX和延迟指标。如果有 是这些指标的增加,可能是由于应用程序 在空闲超时期限内没有响应。有关的详细信息 超时请求,启用负载均衡器上的访问日志 并查看由生成的日志中的504响应代码 弹性负载平衡。如有必要,您可以增加容量 或者增加配置的空闲超时以便进行冗长的操作 (例如上传大文件)可以完成。
原因2:已注册的实例关闭与Elastic Load的连接 平衡。
解决方案2:在EC2实例上启用保持活动设置并进行设置 保持活动超时大于或等于空闲超时 负载均衡器的设置。