Реализация чата в реальном времени Socket.io в моем React Web App с базой данных Koa / typeorm / postgresSQL - PullRequest
0 голосов
/ 05 апреля 2019

извините за не очень описательный вопрос, но в основном мой случай выглядит следующим образом:

У меня есть веб-приложение для аренды комнат, оно имеет чат пользователя, так что вы можете отправлять текстовые сообщения владельцу комнаты и наоборот, то, как оно работает в данный момент, это когда вы отправляете первое сообщение владельцу, он создает диалог в моей базе данных 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 в моем веб-приложении.

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

...