我需要开发一个具有一个“高级”功能的网络聊天:分组聊天 - 就像Skype的聊天系统一样。
这个理论很简单,但在实践中却很难。自上周五以来我一直在考虑这个问题,但我不知道如何应用这种架构。基本上我需要一个具有良好结构的数据库设计而没有存储冗余。
好的......到目前为止看起来很简单,但现在我将介绍我们的主要功能:用户的历史。
我可以与2个用户创建一个聊天。好的,两天过去了,我想添加第三个用户加入对话。聊天对他的历史将有所不同:他将无法在该聊天中查看旧消息。
很好,对吧?请记住,朋友:我不能使用XML在本地存储历史记录。我需要用户SQL数据库。就我而言,我正在使用Microsoft的SQL-Server。
你们都能理解我的问题吗?如果是的话,不是微不足道的,是吧?好。谁能想到我怎么能解决这个问题?我疯了!
答案 0 :(得分:3)
实际上问题 是微不足道的。将其存储在XML中将是真正的问题。
通过添加ChatParticipation
表,您将确切知道用户加入聊天的ChatMessageId
是哪个(JoinChatMessageId
),并且不会在消息之前向他显示消息。 LeaveMessageId
可以跟踪他何时离开聊天室。可以将多个加入/离开建模为单独的参与。
答案 1 :(得分:1)
你还没有说过什么语言(PHP等)..所以它有点难,但是,如果我从PHP的角度创建这个,我会根据id的聊天。 www.site.com/chat.php?id={id}然后有办法相应地接受/拒绝用户。
我可以与2个用户创建一个聊天。好的,两天过去了,我想添加第三个用户加入对话。聊天对他的历史将有所不同:他将无法在该聊天中查看旧消息。
为什么不给每条消息一个日期和时间,然后当用户成员进入聊天时,他们只能看到这个日期/时间的消息?这可以在理论上起作用。
所以,如果我今天下午15:20加入聊天,那么我只能在15:21或之后看到消息。
您的主要问题是实时显示消息,因为它是一个Web应用程序..
祝你好运!答案 2 :(得分:1)
我不确定,我是否正确理解你的问题。
据我所知,你需要4个表: user(userid,username), 对话(conversationid,conversationtitle), user_conversation(userid,conversationid) 发布(userid,conversationid,text)
用户存储系统中注册的所有用户。对话存储所有对话。 user_conversation将用户映射到允许进入的对话。帖子存储用户在某个对话中发布的帖子。
现在,您可以简单地通过用户,通过对话或两者来检索数据。如果您不希望用户查看较旧的帖子,请添加日期字段。
此致
路易