Подтвердить что ты не робот

Symfony2 (WebsocketBundle) - простая частная (и групповая) схема и логика базы данных чата

Я хотел бы реализовать очень простой чат на веб-сайте с частными сообщениями между 2 зарегистрированными и зарегистрированными пользователями (и, возможно, даже групповыми сообщениями между зарегистрированными пользователями).
Возьмите Whatsup в качестве примера, но, конечно, у меня не будет таких пользователей.

Ресурсы: Symfony2 + WebsocketBundle
https://github.com/GeniusesOfSymfony/WebSocketBundle

Два вопроса:
1- Какую схему базы данных вы бы предложили?
2. Как я могу управлять "темами"? (После прочтения учебника WebsocketBundle, я понимаю, как подписаться/отказаться от подписки/трансляции на тему. Но я не знаю, как управлять отношениями между пользователями и темами, как защитить разговоры и т.д. И т.д.

Мне просто нужна информация (без кода) о логике приложения... какая информация для сохранения и где.)

Например, как мне управлять именем канала (будет ли оно изменяться каждый раз, или я буду хранить его в базе данных и как-то повторно использовать его при следующем входе пользователя)?

session.subscribe("acme/channel/id/12345", function(uri, payload){
    console.log("Received message", payload.msg);
});

P.s. Я уже пробовал поиск в SO и Google, но не нашел никакой полезной информации.

4b9b3361

Ответ 1

WebsocketBundle предоставляет вам просто механизм для записи меньше для связи через сокет. Для настройки чата/группового чата у вас есть несколько вариантов. Первым вариантом может быть использование пакета передачи сообщений и его изменение в соответствии с потребностями. Я нашел этот комплект (https://github.com/FriendsOfSymfony/FOSMessageBundle) очень гибким.

Но если вы хотите разработать свою собственную, вот схема, вдохновленная схемой FOSMessageBundle с некоторой настройкой. Присоединение схемы с таблицами и именами столбцов. Легко идентифицировать из него первичные и внешние ключи.

enter image description here

Остальные вещи довольно прямые, кроме одного поля в таблице Thread, которая thread_group_hash. На самом деле целью этого поля является уникальный хэш/ключ для каждого потока. Где поток означает один-один чат или много для многих чатов. В зависимости от того, когда кто-то добавляет людей в чат, пользователи связали с ним IDs. Я сортирую добавленные идентификаторы пользователей в порядке возрастания или убывания и генерирую ключ md5/sha1 и сохраняю его здесь.

Это также можно использовать как topic в WebsocketBundle, потому что используется topic для той же цели, которую мы пытаемся достичь здесь. Всякий раз, когда одна и та же группа людей добавляется в разговор от одной из сторон, сообщение переходит в тот же поток. Но помните, прежде чем вставлять информацию о потоке/сообщении, вам нужно определить, используя этот хеш, где он принадлежит или это новый поток:)