在AWS负载均衡器(ELB)的“监听器”中添加“Websockets”协议。同时,在EC2实例上使用Websocket的应用程序代码中,需要返回HTTP 101状态码。
以下是使用Node.js实现WebSocket的示例代码:
const WebSocket = require('ws');
const server = new WebSocket.Server({
port: 8080,
verifyClient: (info, done) => {
// 对每个连接进行身份验证
done(true);
}
});
server.on('connection', socket => {
console.log('连接已建立');
socket.send('已成功连接到WebSocket服务器');
socket.on('message', message => {
console.log('接收到消息:', message);
// 发送回消息
socket.send(`已接收到消息:${message}`);
});
socket.on('close', (code, reason) => {
console.log(`连接已关闭. code=${code}, reason=${reason}`);
});
// 返回101状态码,以使负载均衡器识别WebSocket协议
socket._socket.write('HTTP/1.1 101 Web Socket Protocol Handshake\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\n\r\n');
});
在代码中,我们在最后向连接的套接字添加写入操作,以发送HTTP状态码101。这样ELB就能够识别WebSocket协议,并将连接转发到后端EC2实例。