我能够让 WebSockets 与新的应用程序负载均衡器 (ALB) 一起工作。
首先,为您的 ALB 创建一个新的目标组。此目标组应使用与您的应用程序相同的端口,并且需要配置运行状况检查。但是,主要区别在于您必须启用粘性。
接下来,将新的侦听器规则添加到您的 ALB。此规则必须有一个路径来路由 WebSocket 设置 -- /socket.io。此外,将目标组名称设置为您刚刚创建的目标组。
我正在为我的服务器使用 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
};
}
})();