2012-08-27 127 views
1

我需要开发一种“高级”功能的网络聊天:分组聊天 - 就像Skype的聊天系统一样。集体网络聊天

该理论是微不足道的,但在实践中它是非常困难的。自从上个星期五我就在想这件事,但我不知道如何应用这种架构。基本上我需要一个没有存储冗余的良好结构的数据库设计。

好的.......到目前为止它似乎很简单,但现在我将介绍我们的主要特点:用户的历史。

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

很好,是吧?请记住,朋友:我无法使用XML来本地存储历史记录。我需要使用SQL数据库。就我而言,我使用的是Microsoft的SQL Server。

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

+0

请只在您的问题中提供相关信息。陈述一个明确的问题,并省去你一直在想的不必要的细节。总而言之,问题有助于他人帮助您更快地获得答案。 – XIII

回答

3

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

  • 用户(用户ID,姓名)
  • 聊天(ChatId,ChatName)
  • ChatParticipation(ChatParticipationId,用户ID,JoinChatMessageId,LeaveMessageId)
  • ChatMessages(ChatMessageId,ChatId,用户ID,消息)

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

+0

现在,“事情”显然对我来说。你打开我的脑海 - 真的!我阻碍了这很容易。我会根据你的回答开展工作。谢谢! –

1

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

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

为什么不给每个消息的日期和时间,然后当用户构件进入聊天,也只能从该日期/时间看到消息?这可以在理论上起作用。

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

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

祝你好运!

+0

你好Phorce。我正在使用C#.NET/AJAX/Server Push来制作这个聊天应用程序。我在想这个,但这不会是多余的? –

+0

我不明白你的意思是'冗余' - 你想要一种方法来阻止刚刚加入的用户看到前面的聊天内容,对吗?所以,如果我在第一次创建时加入聊天,我仍然可以看到聊天,而如果我刚刚加入聊天,聊天对我来说将不可见,但仍然会在那里。不应该有任何的冗余 – Phorce

1

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

据我了解,你需要4个表: 用户(用户ID,用户名), 会话(的conversationId,conversationtitle), user_conversation(用户ID,的conversationId) 后(用户ID,的conversationId,文本)

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

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

问候

路易吉