извините за не очень описательный вопрос, но в основном мой случай выглядит следующим образом:
У меня есть веб-приложение для аренды комнат, оно имеет чат пользователя, так что вы можете отправлять текстовые сообщения владельцу комнаты и наоборот, то, как оно работает в данный момент, это когда вы отправляете первое сообщение владельцу, он создает диалог в моей базе данных PostgreSql, а затем сохраняет сообщения с ключом разговора, однако я хочу, чтобы это происходило в режиме реального времени, мне было интересно, есть ли у кого-нибудь какие-либо советы о том, как мне создавать комнаты? И если да, то как сделать комнату вечной, потому что я хочу приехать завтра или через 10 недель, и у меня все еще есть чат, где я могу написать владельцу ...
Я пытался с io.emit (Redux action, payload), но он отправляет все подключенные сокеты, на данный момент это мой код сокета:
//server side
io.use(
socketIoJwtAuth.authenticate({ secret }, async (payload, done) => {
const user = await User.findOne(payload.id);
if (user) done(null, user);
else done(null, false, `Invalid JWT user ID`);
})
);
io.on('connect', socket => {
const email = socket.request.user.email;
console.log(`${email} just connected`);
socket.on('create', function(room) {
socket.join(room);
}); // I wrote this but dunno how to implement correctly
socket.on('disconnect', () => {
console.log(`${email} just disconnected`);
});
});
//client side
//socketio.js
export default class SocketIO {
socket = null;
connect(dispatch, jwt) {
console.log('Connecting websocket');
this.socket = io.connect(baseUrl, {
query: `auth_token=${jwt}`,
});
this.socket.on('action', payload => dispatch(payload));
}
disconnect() {
console.log('Disconnecting websocket');
this.socket.disconnect();
}
}
//store.js
// when JWT was coming from localStorage, connect via websockets
const initialCurrentUser = store.getState().currentUser;
if (initialCurrentUser) {
socket.connect(store.dispatch, initialCurrentUser.jwt);
}
Цель: чат в режиме реального времени с уведомлением на случай, если я получил сообщение за пределами разговора. По сути, как чат WhatsApp в моем веб-приложении.
в настоящее время: я создаю диалог, я могу отправлять сообщения, но чтобы прочитать полученные, мне нужно обновить окно или отправить сообщение глобально, но все получают сообщение.