当前位置: 首页 > 知识库问答 >
问题:

应用程序负载平衡器是否支持WebSockets?

商泽宇
2023-03-14

我有一个弹性Beanstalk应用程序,最初配置为使用经典的负载平衡器。我发现这在通过WebSocket连接时会导致错误。因此,我将应用程序配置为使用应用程序负载平衡器,因为我被告知ALB支持WebSockets。然而,它们似乎没有:当我试图通过WebSocket连接到我的ALB时,会出现完全相同的错误。

ALB真的支持WebSocket吗?AWS文件在这方面存在矛盾。此页面表示它只支持HTTP和HTTPS。没有设置ALB以支持WebSocket的指南。

共有3个答案

和季
2023-03-14

应用程序负载平衡器支持websocket。但直到2017年2月23日才支持websocket健康检查。他们以后可能会添加选项。当您想在应用程序负载平衡器后面使用websocket时,需要为目标组设置HTTP或HTTPS运行状况检查。

来自AWS文档:“请注意,运行状况检查不支持WebSockets。”

参考号:http://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html

丁经国
2023-03-14

ALB支持Websocket,但如果实例至少每隔“空闲超时”几秒钟不发送一些数据,负载均衡器可以关闭连接。

徐星阑
2023-03-14

我能够让WebSockets使用新的应用程序负载平衡器(ALB)。

首先,为您的ALB创建一个新的目标组。此目标组应使用与您的应用程序相同的端口,并且需要配置健康检查。但是,主要区别在于您必须启用粘性。

接下来,在ALB中添加一个新的侦听器规则。该规则必须有一个路径来路由WebSocket设置-/socket.io.此外,将目标组名称设置为您刚刚创建的目标组。

我正在使用节点/Hapi/套接字。我的服务器的io(在从Amazon Linux AMI派生的实例上运行)。基本设置为:

const hapi = require('hapi');
const websocket = require('./WebSocket');

var server = new hapi.Server();
server.connection(config.Application);
websocket.Initialize(server.listener);

WebSocket.js在哪里

var io = null;

module.exports = {

    Initialize: function (http) {

        io = require('socket.io')(http);

        io.on('connection', function (socket) {
            console.log('Websocket ' + socket.id + ' connected.');

            socket.on('disconnect', function () {
                console.log('Websocket ' + socket.id + ' disconnected.');
            });
        });
    }
};

我正在为我的客户使用Angular 1.5x和socket。io客户端。必须按以下方式配置WebSocket客户端选项,否则将无法连接。

(function () {

    'use strict';

    angular
        .module('XXXXX', [])
        .run(runHandler);

    runHandler.$inject = ['WebSocketService'];

    function runHandler(WebSocketService) {
       WebSocketService.Initialize();
    }
})();

WebSocket服务:

(function () {

    'use strict';

    angular
        .module('XXXXX')
        .factory('WebSocketService', WebSocketService);

    WebSocketService.$inject = [];

    function WebSocketService() {

        var socket = null;

        function initialize() {

            var url = 'http://' + ALB_URL + ':5800';

            socket = io(url, {transports: ['websocket'], upgrade: false});

            socket.on('connect', function () {
                console.log('Socket connected');
            });

            socket.on('disconnect', function () {
                console.log('Socket disconnected');
            });
        }

        return {
            Initialize: initialize
        };
    }
})();
 类似资料:
  • 我希望在现有的服务器设置中集成WAF,因为我有经典的负载平衡器(带有EC2实例),它不支持WAF,我需要迁移到应用程序负载平衡器。 是否可以在不更改DNS(记录)的情况下将现有的经典负载平衡器迁移到应用程序负载平衡器?

  • 我正在尝试设置应用型负载均衡,以将流量转发到AWS中的Nginx入口控制器。要设置Nginx入口控制器,我使用的是从安装说明中获得的YML。 部署后,一切正常,流量正确转发到EKS pod。但是,上面的YML文件正在aws中创建“经典负载均衡器”,因为我想创建“应用型负载均衡器”。我将“service.beta.kubernetes.io/aws-load-balancer-type: elb”更

  • 我正在尝试在我的应用程序中使用AWS应用程序负载平衡器,其中包含WAF支持。同时,我还需要对反向代理的支持。AWS应用程序负载平衡器是否处理反向代理?

  • 我正在尝试配置AWS应用型负载均衡器(与经典负载均衡器相比)以将流量分配到我的EC2 Web服务器。出于合规性原因,我的应用程序需要端到端SSL/HTTPS加密。 在我看来,确保在客户端和web服务器之间的整个过程中对流量进行加密的最简单方法是终止web服务器上的HTTPS连接。 我的第一个问题:是否可以通过AWS应用程序负载平衡器将HTTPS流量以这种方式传递到负载平衡器后面的web服务器? 根

  • AWS推出了应用程序负载平衡器,可以进行基于路径的路由。是否可以将经典负载平衡器放在应用程序负载平衡器之后。 示例:假设我们有两个经典的负载平衡器。应用程序负载平衡器将流量路由到所有url(如应用程序负载平衡器/前端)的第一个经典负载平衡器,并将流量路由到所有url(如应用程序负载平衡器/后端)的第二个经典负载平衡器* 目前,似乎我们只能将主机置于应用程序负载平衡器之后。是否可以将负载平衡器置于应

  • 这是我的第一个负载平衡问题。 我已经编写了一个简单的express应用程序来了解负载平衡是如何工作的。我还看了一些类似于的东西。如果我必须使用Nginx进行负载平衡,那么我是否应该在4个不同的docker容器中运行4个不同的express实例,然后使用Nginx在它们之间进行负载平衡,而Nginx位于自己的容器中? 我说得对吗?我有点困惑