У меня есть веб-сервер. Соединение с почтальоном работает, но в моем проекте реагирования нет

Итак, у меня есть сервер веб-сокетов, построенный на Python, который развернут в контейнере EC2. Подключение через почтальон работает отлично, но при подключении через Websocket в React всегда выдает такую ​​ошибку:

Соединение WebSocket с «wss://xxx:3500/» не удалось:

без дальнейшего описания.

    useEffect(() => {
        const socket = new WebSocket(
            process.env.NODE_ENV === 'production' ? "wss://xxxx:3500" : "ws://localhost:3500",
        );
        setSocket(socket);
        socket.addEventListener("message", (event: MessageEvent<string>) => {
            handleWebSocketMessage(event, setFutures, setStocks, setBonds, setDollars)
        });

        socket.addEventListener("error", (event) => {
            console.error("WebSocket error:", event);
        });
    }, []);

Способ, которым я временно исправил эту проблему, заключался в отключении сертификатов SSL на моем сервере веб-сокетов Python и подключении через ws вместо wss. Но это не решение, так как мне нужно, чтобы оно было в безопасности. Дело в том, что когда сервер защищен, он работает только через почтальона.

Я уже пробовал отладку, подключившись к макету wss-сервера в моем соединении с веб-сокетом React, и это сработало отлично, поэтому я пришел к выводу, что проблема не в клиенте. Что может произойти?

🤔 А знаете ли вы, что...
Python популярен в анализе данных и машинном обучении с помощью библиотеки scikit-learn.


2
757
2

Ответы:

Вы используете nginx? Если да, то вам следует добавить в свой файл .conf что-то вроде этого:

location /socket.io/ {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;

        proxy_pass http://127.0.0.1:3500;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

Решено

Я исправил проблему, исправив сертификаты сервера веб-сокетов. Причина сбоя в моем браузере, а не в почтальоне, заключалась в том, что почтальон не заботится о сертификате сервера, а клиент https может подключаться только к wss-серверу.