1

我需要开发一个具有“高级”功能的网络聊天:分组聊天 - 就像 Skype 的聊天系统。

理论是微不足道的,但在实践中是非常困难的。从上周五开始我就在考虑这个问题,但我不知道如何应用这个架构。基本上我需要一个结构良好且没有存储冗余的数据库设计。

好的.......到目前为止看起来很简单,但现在我将介绍我们的主要功能:用户历史记录。

我可以与 2 个用户创建一个聊天。好的,两天过去了,我想添加第三个用户加入对话。他的聊天历史会有所不同:他将无法查看该聊天中的旧消息。

太棒了,对吧?请记住,朋友们:我不能使用 XML 在本地存储历史记录。我需要使用 SQL 数据库。就我而言,我使用的是 Microsoft 的 SQL-Server。

大家能理解我的问题吗?如果是的话,这不是微不足道的,对吧?行。有人能想到我该如何解决这个问题吗?我要疯了!

4

3 回答 3

3

其实这个问题微不足道的。将它存储在 XML 中将是真正的问题。

  • 用户(用户 ID、名称)
  • 聊天(ChatId、ChatName)
  • 聊天参与(ChatParticipationId、UserId、JoinChatMessageId、LeaveMessageId)
  • ChatMessages(ChatMessageId、ChatId、UserId、消息)

通过添加ChatParticipation表格,您将确切知道ChatMessageId用​​户加入聊天的确切时间 ( JoinChatMessageId),并且不会向他显示之前的消息。LeaveMessageId可以跟踪他何时离开聊天室。多个加入/离开可以建模为单独的参与。

于 2012-08-27T14:19:57.940 回答
1

你还没有说什么语言(PHP 等)。所以这有点难,但是,如果我是从 PHP 的角度创建这个,我会根据 id 进行聊天。www.site.com/chat.php?id={id} 然后有办法相应地接受/拒绝用户。

我可以与 2 个用户创建一个聊天。好的,两天过去了,我想添加第三个用户加入对话。他的聊天历史会有所不同:他将无法查看该聊天中的旧消息。

为什么不给每条消息一个日期和时间,然后当用户成员进入聊天时,他们只能看到来自该日期/时间的消息?这在理论上是可行的。

因此,如果我今天下午 15:20 加入聊天,那么我只能在 15:21 或之后看到消息。

您的主要问题是实时显示消息,因为它是一个 Web 应用程序..

祝你好运!

于 2012-08-27T14:17:08.480 回答
1

我不确定,我是否正确理解了您的问题。

据我了解,你需要4个表:user(userid,username),conversation(conversationid,conversationtitle),user_conversation(userid,conversationid) post(userid,conversationid,text)

user 存储在您的系统中注册的所有用户。对话存储所有对话。user_conversation 将用户映射到他们被允许进入的对话。Post 存储用户在特定对话中发布的帖子。

现在,您可以简单地按用户、对话或两者从帖子中检索数据。如果您不希望用户看到较旧的帖子,请添加日期字段。

问候

路易吉

于 2012-08-27T14:19:20.247 回答