Я использую 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 };
Я хочу сокет на нескольких страницах, поэтому для ссылки на один сокет я использовал сокет в контексте. Везде, где мне нужен сокет, я импортирую этот контекст и использую его соответствующим образом.
Как я могу решить проблему с отключением, чтобы сокет оставался активным, когда система / браузер пользователя неактивны?