Я настраиваю несколько веб-сокетов, используя библиотеку ws. Я изо всех сил пытаюсь настроить авторизацию с помощью рукопожатия. Я добавил маршрут к нашему серверу для обновления до соединения через веб-сокет, например:
.get(
'/chat',
authorisationFunction,
upgradeConnection,
),
Сервер веб-сокета:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 3030 });
Это функция upgradeConnection, которая запускается при авторизации успешно:
const upgradeConnection = (request, socket, head) => {
return wss.handleUpgrade(request, request.socket, head, function done(ws) {
return wss.emit('connection', ws, request);
});
}
У меня также есть функция, которая прослушивает сообщения:
function webSocketsServer() {
wss.on('connection', (ws, request, client) => {
ws.on('message', message => {
ws.send(message);
});
});
}
Создается соединение, и с моего сервера я получаю этот ответ:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: QyVvqadEcI1+ALka6j2pLKBkfNQ=
но тут же на моем клиенте я получаю сообщение об ошибке «Соединение WebSocket с 'ws: // localhost: 3000 / chat' не удалось: недопустимый заголовок кадра».
Но когда я обхожу рукопожатие и подключаюсь непосредственно на мой сервер websocket, я могу успешно отправлять сообщения. Ошибка только на клиенте, а не на серверной части. Что мне не хватает?