Мне удалось заставить WebSockets работать с новым балансировщиком нагрузки приложений (ALB).
Сначала создайте новую целевую группу для вашего ALB. Эта целевая группа должна использовать тот же порт, что и ваше приложение, и ей необходимо будет настроить проверки работоспособности. Однако главное отличие состоит в том, что вы должны включить липкость.
![«Добавить](https://i.stack.imgur.com/InCGh.png)
Затем добавьте новое правило слушателя в свой ALB. Это правило должно иметь путь для маршрутизации настройки WebSocket - /socket.io. Кроме того, в качестве имени целевой группы укажите только что созданную целевую группу.
![Добавить правило прослушивания для WebSocket](https://i.stack.imgur.com/oxODS.png)
Я использую Node / Hapi / Socket.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-client. Важно настроить параметры клиента 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
};
}
})();
person
programmerj
schedule
04.11.2016