nepster-web
@nepster-web

Как правильнее всего организоваться разделение по комнатам в чате на node.js?

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

Когда пользователь заходит на страницу чата, я отправляю специальный токен и идентификатор (interlocutor_id) собеседника на сервер node.js:
socket.on('connect', function () {
   socket.emit('add user', 'hash', 'interlocutor_id');
});


Далее в мое логике есть вот такое дело:
/**
     * Добавляем пользователя в комнату
     * @var hash - на основе которого необходимо проверить текущего пользователя
     * @var interlocutor_id - идентификатор собеседника
     */
    socket.on('add user', function (hash, interlocutor_id) {

        //TODO: Узнаем user_id по hash и проверяем может ли пользователь общаться в чате
        //TODO: Проверяем общий список, ожидает ли кто-то общения с user_id
        //TODO: Если кто-то ожадает общения с user_id записываем user_id в общий список и добавляем в нужную комнату
        //TODO: Если никто не ожидает общения с user_id, создаем для него комнату и вносим в общий список


        // socket.join(room);
        console.log (hash);

    });


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

Я думаю держать вот такой объект:

rooms = [
        {
            name: 'fds5e6f7y89sgufdgifdg5430fd',
            users : [
                {
                    soket: '1'
                },
                {
                    soket: 'interlocutor_id'
                }
            ]

        },
        {
            name: 'fdsjio87f6f7d68s7f6sdfdsf7d',
            users : [
                {
                    soket: '1'
                },
                {
                    soket: 'interlocutor_id'
                }
            ]
        }
    ];


Смысл следующий:
Я захожу в чат, чат получает данные (мой хэш и идентификатор собеседника). Далее node.js проверяет хэш, тоесть идет в базу данных смотрит, что по чем,и при хорошем раскладе получает данные текущего пользователя.
Далее я иду в свой объект и начинаю его перерывать, в надежде найти комнату, где есть 1 пользователь с подходящим interlocutor_id, если пользователь найден (тоесть меня кто-то уже ждет), я получаю название комнаты и отправляю сообщения уже. Если пользователь не найден, то я генерирую случайное название комнаты и дописываю это дело в объект.

Собственно поделитесь пожалуйста опытом и прокомментируйте подход?
  • Вопрос задан
  • 687 просмотров
Пригласить эксперта
Ответы на вопрос 1
S-ed
@S-ed
Комбайнёр
Попробуйте Socket.io:
socket.io/docs/rooms-and-namespaces/#
psitsmike.com/2011/10/node-js-and-socket-io-multir...

Готовый чат:
tutorialzine.com/2014/03/nodejs-private-webchat

Урок по созданию чата с node.js, express, socket.io, mongo, bootstrap:
www.sitepoint.com/build-node-js-powered-chatroom-w...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы