【发布时间】:2019-05-23 23:19:07
【问题描述】:
我在 AWS Fargate 上设置了一个服务器,并通过 Socket.io 连接到 Application Load Balancer。
我开启了Application Load Balancer的访问日志,日志如下:
http 2018-12-25T04:00:15.787118Z app/EC2Co "GET http://ec2co.us-east-2.elb.amazonaws.com:28656/socket.io/?EIO=3&transport=polling&t=1545710415657-0 HTTP/1.1" "python-requests/2.20.0" - - arn:aws:elasticloadbalancing:us-east-2:735263141676:targetgroup/EC2Co-Defau-8X "Root=1-5c21ab4f-f26e11527cb2fa030ade3020" "-" "-" 0 2018-12-25T04:00:15.777000Z "forward" "-" "-"
ws 2018-12-25T04:00:14.548103Z app/EC2Co "GET http://ec2co.us-east-2.elb.amazonaws.com:28656/socket.io/?EIO=3&transport=websocket&sid=ils820o21XTc_rlnAAAA HTTP/1.1" "python-requests/2.20.0" - - arn:aws:elasticloadbalancing:us-east-2:735263141676:targetgroup/EC2Co-Defau-8X "Root=1-5c21ab27-560b3f40746e96c087a97ec0" "-" "-" 0 2018-12-25T03:59:35.646000Z "forward" "-" "-"
ws 2018-12-25T04:14:38.103181Z app/EC2Co "GET http://ec2co.us-east-2.elb.amazonaws.com:28656/socket.io/?EIO=3&transport=websocket&sid=lO2XYpIjTe_9p4s7AAAA HTTP/1.1" "python-requests/2.20.0" - - arn:aws:elasticloadbalancing:us-east-2:735263141676:targetgroup/EC2Co-Defau-8X "Root=1-5c21ab50-f024082cf6db65724f6384c0" "-" "-" 0 2018-12-25T04:00:16.360000Z "forward" "-" "-"
http 2018-12-25T04:14:39.359703Z app/EC2Co "GET http://ec2co.us-east-2.elb.amazonaws.com:28656/socket.io/?EIO=3&transport=polling&t=1545711279222-0 HTTP/1.1" "python-requests/2.20.0" - - arn:aws:elasticloadbalancing:us-east-2:735263141676:targetgroup/EC2Co-Defau-8X "Root=1-5c21aeaf-8a69112ff7361e029ddedf81" "-" "-" 0 2018-12-25T04:14:39.344000Z "forward" "-" "-"
如您所见,连接正确升级到websocket 连接,但降级到polling。
我想知道这是否是正常行为?
客户端和 Application Load Balancer 之间的连接大约每 2 分钟重置一次,有时甚至不到 2 分钟,即使我每分钟向负载均衡器发送 ping。
此外,负载均衡器的健康检查不断失败,并且没有一个目标变得健康。
我没有在我的客户端代码中明确定义消息200 ok 以供负载均衡器接收。我必须明确定义200 ok 消息吗?如果是,那么负载均衡器在这些运行状况检查期间发送的事件是什么?
不断断开连接导致从客户端到负载均衡器的一些输入,进而导致 AWS Fargate 服务器丢失。
我在我的服务器上使用express。以下是服务器端 app.js 的相关代码:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var AWS = require ('aws-sdk');
请注意,服务器代码在Nodejs,而客户端代码在Python。这会产生影响并导致断开连接吗?
那么,这是正常行为吗(参见上面的日志)?还是我缺少什么?
另外,我如何定义200 ok 消息在负载均衡器进行健康检查时发送到它,以便我的目标变得健康?
如果我遗漏了任何信息并且您需要回答此问题,请在下方发表评论,我将编辑问题以提供所需信息。
谢谢。
【问题讨论】:
标签: amazon-web-services socket.io