сохранить сокет, когда страница / браузер простаивает - PullRequest
0 голосов
/ 05 апреля 2020

Я использую socket.io для связи в реальном времени. Я столкнулся с проблемой, когда браузер пользователя простаивает. Я имею в виду, предположим, что есть две сущности «Пользователь A» и «Пользователь B». Пользователь A хочет поговорить с пользователем B. Если пользователь B открыл приложение, но не активен на этой странице, то пользователь A не может связаться с пользователем B, так как сокет пользователя B отключается через несколько минут, когда система находится в режиме ожидания. Также я не вижу непрерывного опроса на вкладке ws внутри сети

Вот код для настройки сокета. Я использую контекстный API

const SocketProvider = ({ children }) => {
  const [socketClient, setSocketClient] = React.useState();
  const [socketUpdated, setSocketUpdated] = React.useState(false);

  React.useEffect(() => {
    const socket = io(SOCKET_URL, {
      path: "/socket.io"
    });
    setSocketClient(socket);
    // return () => {
    //   io.disconnect();
    // };
  }, []);

  React.useEffect(() => {
    if (socketClient !== undefined) {
      if (user) { // from localstorage
        console.log("user", user);
        socketClient.on("connect", () => {
          socketClient.emit("userData", {
            _id: user._id,
            socketId: socketClient.id
          });
        });

        // socketClient.on("connected", msg => {
        //   console.log("connected msg", msg);
        //   setSocketUpdated(true);
        // });
        // setSocketUpdated(true);
      }
    }
  }, [socketClient]);

  return (
    <>
      <SocketContext.Provider value={{ socket: socketClient, socketUpdated }}>
        {children}
      </SocketContext.Provider>
    </>
  );
};

export { SocketContext, SocketProvider };

Я хочу сокет на нескольких страницах, поэтому для ссылки на один сокет я использовал сокет в контексте. Везде, где мне нужен сокет, я импортирую этот контекст и использую его соответствующим образом.

Как я могу решить проблему с отключением, чтобы сокет оставался активным, когда система / браузер пользователя неактивны?

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