Используемый socket.ioEffect создает ошибку прокси (ECONNRESET) - PullRequest
0 голосов
/ 14 апреля 2020

Сводка

Я создал прототип для приложения, которое будет иметь какую-то функцию чата. На данный момент интерфейс React просто извлекает данные через useEffect. Чтобы реализовать более динамичное ощущение чата c, я подумал об использовании socket.io. При создании экземпляра сокета.io на стороне клиента, как это было предложено (используется useEffect), я получаю ошибку ECONNRESET.

Настройка:

  • Бэкэнд: Node.js + express. js (прослушивание на порту 5000)
  • Внешний интерфейс: Реакция
  • Внешний интерфейс: Прокси для локальной разработки в пакете. json вот так "proxy": "http://localhost:5000"

Проблема:

При инициализации моего сокета на стороне клиента вот так:

const Flow = () => {

    ...

    const fetchsocketData = () => {
        const socket = io();
        console.log("trying socket stuff");
        socket.on("FromBackEnd", data => {console.log(data)});
    };
    useEffect(() => fetchsocketData(),[])

    ...

    return (<div>Yolo</div>)
}

Прокси (как определено в package. json) прекрасно работает, например, с Ax ios -calls, однако с socket.io я получаю следующую ошибку на на стороне сервера :

Ошибка прокси: не удалось запросить прокси /socket.io/?EIO=3&transport=polling&t=N5v5GOe&sid=yugXlgWYsoqJRqcxAAAT с локального хоста: от 3000 до http://localhost: 5000 . См. https://nodejs.org/api/errors.html#errors_common_system_errors для получения дополнительной информации (ECONNRESET).

И следующая ошибка на стороне клиента :

websocket. js: 116 Соединение WebSocket с 'ws: // localhost: 3000 / socket.io /? EIO = 3 & transport = websocket & sid = QKMDK2qmVGT3eud2AAAA' завершилось ошибкой: ошибка во время квитирования WebSocket: непредвиденный код ответа: 400

Это кажется временным явлением, так как соединение socket.io в конечном счете устанавливается и выдает тестовые сообщения.

Чтобы сделать вещи немного более странными: если я переместу экземпляр сокета в Инициируемое пользователем событие:

const manuallyInstantiateSocket = () => {
    const socket = io();
    console.log("trying socket stuff");
    socket.on("FromBackEnd", data => {console.log(data)});
}

И вызов этого по нажатию кнопки все работает, как ожидалось. Нет ошибок на стороне сервера вещей. Ошибка внешнего интерфейса сохраняется.

Чего мне здесь не хватает?

...