socket.io не работает правильно с React js Node.js и Express.js - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь интегрировать socket.io с React.js. Я запускаю socket.io на сервере с серверной частью Express.js.

Проблема в том, что я на домашней странице, и когда заказ размещен с домашней страницы, я показываю этот заказ на странице «Заказы» React, но проблема в том, что иногда он показывает заказ, но иногда он не показывает заказ, и если я откройте несколько вкладок в разных браузерах, затем на некоторых вкладках в некоторых браузерах порядок не будет отображаться, это означает, что сокетное соединение не работает некоторое время, но во всех случаях, когда когда-либо создается ордер с домашней страницы, то происходит генерация из socket.io с домашней страницы отображается в серверной части Node.js Express.js.

Обратите внимание, что я использую модуль кластеризации в express.js

Вот как я создаю соединение socket.io.

socket = io('http://localhost:5000',{ reconnect: true ,transports: ['websocket']});

Вот компонент реагирования моей домашней страницы, откуда я размещаю заказ.

socket.emit("putKitchenOrder", Order);

Вот мой второй компонент, на котором я хочу показать заказ, который размещен в режиме реального времени, используя socket.io

componentWillUnmount(){
   socket.off("kitchen-channel:orderPlacedFromPos");
}
componentDidMount() {
    socket.on("kitchen-channel:orderPlacedFromPos",  (order) => {
        console.log('order in orderPlacedFromPos');
        console.log(order);
        alert('order in orderPlacedFromPos')

    });
}

Вот мой код Node.js и Express.js

io.on("connection", socket => {
  socket.on("putKitchenOrder", order => {
    // this console.log is always showing in the node.js console window when ever a new order is placed from the homepage component but the second page is not getting the following emit "kitchen-channel:orderPlacedFromPos" sometime.
    console.log('putKitchenOrder order');
    io.emit("kitchen-channel:orderPlacedFromPos",order);

  });
});

console.log ('putKitchenOrder order'); всегда отображается в окне консоли node.js, когда когда-либо новый заказ размещается из компонента домашней страницы, но вторая страница иногда не получает следующий сигнал "kitchen-channel: orderPlacedFromPos".

1 Ответ

0 голосов
/ 03 июня 2019

Из того, что я знаю, когда вы переключаетесь между компонентами, компоненты устанавливаются снова.Так что, возможно, вы можете создать синглтон для экземпляра сокета, как в этой статье , и поместить журнал в файл, где вы создаете сокет, вы можете отладить его, а также решить эту проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...