Сводка
Я создал прототип для приложения, которое будет иметь какую-то функцию чата. На данный момент интерфейс 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)});
}
И вызов этого по нажатию кнопки все работает, как ожидалось. Нет ошибок на стороне сервера вещей. Ошибка внешнего интерфейса сохраняется.
Чего мне здесь не хватает?