Symfony2(WebsocketBundle) - 简单的私有(和组)聊天数据库模式和逻辑

Igo*_*gna 12 chat symfony

我想在网站上实现一个非常简单的聊天,在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);
});
Run Code Online (Sandbox Code Playgroud)

我已经尝试在搜索引擎优化和谷歌搜索,但找不到任何有用的信息.

Imr*_*oor 1

WebsocketBundle为您提供了一种减少通过套接字进行通信的机制。对于聊天/群聊设置,您有多种选择。第一个选项可以是使用一些消息包并根据需要进行修改。我发现这个包(https://github.com/FriendsOfSymfony/FOSMessageBundle)非常灵活。

但如果您想开发自己的模式,这里的模式是受 FOSMessageBundle 模式启发并进行了一些自定义。附加带有表及其列名称的架构。人们可以轻松地从中识别主键和外键。

在此输入图像描述

Thread除了表中的一个字段 . 之外,其余的事情都非常简单thread_group_hash。实际上,该字段的目的是每个线程的唯一哈希/键。其中线程意味着一对一聊天或多对多聊天。无论哪种情况,每当有人将人员添加到用户与其关联的聊天中时IDs。我按升序或降序对添加的用户 ID 进行排序,并生成 md5/sha1 密钥并将其存储在此处。

topic这也可以像in一样使用WebSocketBundle,因为它的使用topic目的与我们在这里试图实现的目的相同。每当同一组人从任何一方添加到对话中时,通信都会进入同一个线程。但请记住,在插入线程/消息详细信息之前,您需要使用此哈希来识别它所属的位置或者它是一个新线程:)