gpt4 book ai didi

Symfony2 (WebsocketBundle) - 简单的私有(private)(和群组)聊天数据库架构和逻辑

转载 作者:行者123 更新时间:2023-12-02 05:47:28 26 4
gpt4 key购买 nike

我想在网站中实现一个非常简单的聊天,在 2 个注册和登录用户之间发送私有(private)消息(甚至可能在登录用户之间发送群组消息)。
以 Whatsup 为例,但我当然不会有那么多用户。

资源:Symfony2 + WebsocketBundle
https://github.com/GeniusesOfSymfony/WebSocketBundle

两个问题:
1-您建议使用什么数据库架构?
2-我如何管理“主题”? (阅读WebsocketBundle教程后,我了解了如何订阅/取消订阅/广播主题。但我不知道如何管理用户和主题之间的关系,如何保护对话等......
我只需要一些有关应用程序逻辑的信息(无代码)...要保存哪些信息以及在哪里。)

例如,我如何管理 channel 的名称(它每次都会更改,还是将其存储在数据库中并在用户下次登录时以某种方式重新使用它)?

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

P.s.我已经尝试在 SO 和 Google 上搜索,但找不到任何有用的信息。

最佳答案

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

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

enter image description here

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

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

关于Symfony2 (WebsocketBundle) - 简单的私有(private)(和群组)聊天数据库架构和逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28937843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com