Ich konnte WebSockets mit dem neuen Application Load Balancer (ALB) arbeiten.
Erstellen Sie zuerst eine neue Zielgruppe für Ihr ALB. Diese Zielgruppe sollte den gleichen Port wie Ihre Anwendung verwenden und Health Checks konfiguriert haben. Der Hauptunterschied besteht jedoch darin, dass Sie Klebrigkeit aktivieren müssen.
Als nächstes werden eine neue Listener-Regel zu Ihrem ALB hinzuzufügen. Diese Regel muss über einen Pfad zum Routing des WebSocket-Setups - /socket.io verfügen. Legen Sie den Zielgruppennamen auch auf die soeben erstellte Zielgruppe fest.
Ich bin mit Node/Hapi/Socket.io für meinen Server (auf Instanz läuft, abgeleitet von Amazon Linux AMI). Grundkonfiguration ist:
const hapi = require('hapi');
const websocket = require('./WebSocket');
var server = new hapi.Server();
server.connection(config.Application);
websocket.Initialize(server.listener);
wo WebSocket.js
ist
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.');
});
});
}
};
I Angular 1,5x für meine Kunden bin mit, mit socket.io-Client. Es ist wichtig, die WebSocket-Clientoptionen wie folgt zu konfigurieren, oder Sie können keine Verbindung herstellen.
(function() {
'use strict';
angular
.module('XXXXX', [])
.run(runHandler);
runHandler.$inject = ['WebSocketService'];
function runHandler(WebSocketService) {
WebSocketService.Initialize();
}
})();
Der WebSocket-Service:
(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
};
}
})();
Aus dem offiziellen Blog: https://aws.amazon.com/blogs/aws/new-aws-application-load-balancer/ „ALB bietet native Unterstützung für WebSocket über die ws: // und wss: // protocols. " –
Trotz dieser Ankündigung und der FAQ-Abschnitt für die ALB, bekomme ich auch den gleichen Fehler auf einem ALB (http Status 501 nicht implementiert) – nont
trotz https: //aws.amazon.com/elasticloadbalancing/applicationloadbalancer/faqs/ – nont