Здравствуйте !
У меня проблема с подключением к WebSocket серверу в браузере.
Мой файл точки входа app.js выглядит так:
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const connection = require('./db');
const wss = require('./wss');
const app = express();
app.disable("x-powered-by");
app.use(express.json());
app.use(cors());
app.use('/api', require('./api/products'));
app.use('/api', require('./api/cart'));
app.use('/api', require('./api/info'));
app.listen(PORT, () => console.log('server started on PORT ' + PORT))
wss.on('connection', ws => {
ws.on('close', () => console.log('Client has disconnected!'));
ws.on('error', (err) => {
console.log(err);
console.log('websocket error')
});
})
Файл wss.js:
const { WebSocketServer } = require('ws');
const WS_PORT = process.env.WS_PORT;
const wss = new WebSocketServer({ port: WS_PORT });
module.exports = wss;
На клиенте я подключаюсь к сокету:
const socket = new WebSocket('wss://domain.ru/check-orders');
socket.addEventListener('message', event => {
const newOrder = JSON.parse(event.data);
});
socket.addEventListener('open', event => {
console.log('WebSocket соединение установлено');
});
socket.addEventListener('close', event => {
console.log('WebSocket соединение закрыто');
});
socket.addEventListener('error', error => {
console.error('Ошибка в WebSocket соединении:', error);
});
Браузер не может подключиться, из за ошибки WebSocket connection to 'domain.ru/check-orders' failed
В консоль логе Event объект:
isTrusted: true
bubbles: false
cancelBubble: false
cancelable: false
composed: false
currentTarget: WebSocket {__zone_symbol__messagefalse: Array(1), __zone_symbol__openfalse: Array(1), __zone_symbol__closefalse: Array(1), __zone_symbol__errorfalse: Array(1), url: 'wss://domain.ru/check-orders', …}
defaultPrevented: false
eventPhase: 0
returnValue: true
srcElement: WebSocket {__zone_symbol__messagefalse: Array(1), __zone_symbol__openfalse: Array(1), __zone_symbol__closefalse: Array(1), __zone_symbol__errorfalse: Array(1), url: 'wss://domain.ru/check-orders', …}
target: WebSocket {__zone_symbol__messagefalse: Array(1), __zone_symbol__openfalse: Array(1), __zone_symbol__closefalse: Array(1), __zone_symbol__errorfalse: Array(1), url: 'wss://domain.ru/check-orders', …}
timeStamp: 3553238.5
type: "error"
Во вкладке network я вижу рукопожатием со статусом finished, заголовки которые отправляются:
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Cache-Control: no-cache
Connection: Upgrade
Host: domain.ru
Origin:
localhost:5000
Pragma: no-cache
Sec-Websocket-Extensions: permessage-deflate; client_max_window_bits
Sec-Websocket-Key: 5wtodhi66whbQvA7kCmmtQ==
Sec-Websocket-Version: 13
Upgrade: websocket
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
Подскажите пожалуйста в чем проблема и как исправить её ?