我正在为我的服务器使用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.');
});
});
}
};
5条答案
按热度按时间8oomwypt1#
我能够让WebSockets与新的应用程序负载平衡器(ALB)一起工作。
首先,为ALB创建一个新的目标组。此目标组应使用与应用程序相同的端口,并且需要配置运行状况检查。但是,主要区别在于您必须启用粘滞。
接着,将新的监听器规则新增至ALB。此规则必须具有路径,以路由WebSocket设定-- /socket.io。此外,将“目的群组名称”设定为您刚建立的“目的群组”。
我正在为我的服务器使用Node/Hapi/Socket.io(运行在从Amazon Linux AMI派生的示例上)。基本设置如下:
其中WebSocket.js是
我的客户端使用的是Angular 1.5x,带有socket.io-client。按如下所示配置WebSocket客户端选项非常重要,否则您将无法连接。
WebSocket服务:
0sgqnhkj2#
ALB支持WebSocket,但如果示例没有至少每隔“空闲超时”秒发送一些数据,负载平衡器可能会关闭连接。
fiei3ece3#
应用负载平衡器支持WebSocket。但在2017年2月23日之前不支持websocket运行状况检查。他们可能会在以后添加一个选项。当您希望在应用负载平衡器后面使用websocket时,您需要为您的目标组设置HTTP或HTTPS运行状况检查。
来自AWS文档:“请注意,运行状况检查不支持WebSockets。”
参考:http://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html
jckbn6z74#
ALB(应用程序负载平衡器)支持websockets。您可以检查here
ALB也会根据配置的空闲超时关闭连接。
SnapShot from the above blog
kmbjn2e35#
当我们在客户端使用套接字io并调用socket.js库时
就像这样
我所观察到的是,当我指定Http作为协议时,它将调用重定向到ws://domain.com,但当我指定https时,它将重定向到wss://domain. com,并且我得到此错误失败:WebSocket握手期间出错:意外响应代码:400我所做的是我指定的
这确实解决了我的问题