【问题标题】:Connecting to AWS Fargate server behind an Application Load Balancer via Socket.io通过 Socket.io 连接到 Application Load Balancer 后面的 AWS Fargate 服务器
【发布时间】: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


    【解决方案1】:

    HealthCheck 由 LoadBalancer 执行(在随附的 TargetGroup 中配置,默认为 200 Ok - 请参阅 AWS Elastic Loadbalancing Targetgroup HealthChecks

    你已经找到/检查过这个了吗?

    does-an-application-load-balancer-support-websockets

    对不起,在德国这里已经很晚了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-30
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 2020-12-31
      • 2019-01-25
      相关资源
      最近更新 更多