如何在两个人之间发送诸如whatsapp,telgram,viber或imo之类的消息?

时间:2019-02-18 09:11:08

标签: node.js firebase security socket.io chat

我想创建一个类似whatsapp的Messenger应用, 1.首先,我需要列出连接到我的Messenger应用程序的人员列表。 2.我想向列表中存在的人发送消息,因此我在列表上单击其名称。 3.现在我想和他聊天。

在这里,我不想将消息广播给所有人。

所以请告诉我最好的安全方式。

我已经做了一些类似下面的代码。 我只是在两个人之间建立了一个房间 这很好。 但是问题是两个人第一次同时单击彼此去发送消息时,创建了两个不同的房间。 如果他们在不同时间第一次从列表中单击彼此,则效果很好。

(async()=> {

try {

    const r1 = await AsyncStorage.getItem(userphone + "u-uuuuuuuu-u" + mynumber);
    const r2 = await AsyncStorage.getItem(mynumber + "u-uuuuuuuu-u" + userphone);

    if (r1 !== null || r2 !== null) {
        if (r1 !== null) {
            this.socket.emit("joiningroom", { room: r1 });
            if (this._isMounted) {
                this.setState({ room: r1 });
            }
        } else {
            this.socket.emit("joiningroom", { room: r2 });
            if (this._isMounted) {
                this.setState({ room: r2 });
            }
        }

    } else {

        var ref1 = db.collection('chatrooms').doc(userphone + "u-uuuuuuuu-u" + mynumber);
        var ref2 = db.collection('chatrooms').doc(mynumber + "u-uuuuuuuu-u" + userphone);

        const doc1 = await ref1.get();
        const doc2 = await ref2.get();

        if (doc1.exists || doc2.exists) {

            if (doc1.exists) {
                const room = doc1.data().mbaliotaq;
                this.socket.emit("joiningroom", { room });
                if (this._isMounted) {
                    this.setState({ room });
                }
                await AsyncStorage.setItem(userphone + "u-uuuuuuuu-u" + mynumber, room);
            } else {
                const room = doc2.data().mbaliotaq;
                this.socket.emit("joiningroom", { room });
                if (this._isMounted) {
                    this.setState({ room });
                }
                await AsyncStorage.setItem(mynumber + "u-uuuuuuuu-u" + userphone, room);
            }

        } else {

            const id = userphone + "u-uuuuuuuu-u" + mynumber;
            const room = "mmm" + userphone + "r-rrrrrrrrr-r" + mynumber + "mmm";

            db.collection('chatrooms').doc(id).set({
                mbaliotaq: room
            }).then(() => {
                this.socket.emit("joiningroom", { room });
                if (this._isMounted) {
                    this.setState({ room });
                }
            }).catch(err => {
                console.log(err);
            });
        }
    }

} catch (e) {
    console.log(`Error in async ${e}`);
}

})();

我需要比解决方案更好的方法和安全的方法。

1 个答案:

答案 0 :(得分:0)

不是创建聊天室,而是创建创建消息对象,该对象将具有messageId,sendererId,receiverId,时间,文本等...

并在后端检查中根据usersId发送消息