@carbanak01

Почему браузер не может подключится к WebSocket серверу?

Здравствуйте !
У меня проблема с подключением к 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

Подскажите пожалуйста в чем проблема и как исправить её ?
  • Вопрос задан
  • 936 просмотров
Решения вопроса 1
@carbanak01 Автор вопроса
Решение проблемы было прямо под носом )
Нужно было в конце адресса добавить слэш, при подключении к веб сокету, так как был редирект 301.
То есть, вот так const socket = new WebSocket('wss://domain.ru/check-orders/');
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы