2012-08-27 170 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將用戶映射到允許進入的對話。帖子存儲用戶在特定對話中發佈的帖子。

現在,您可以簡單地檢索用戶,對話或兩者的帖子數據。如果您不希望用戶看到舊帖子,請添加日期字段。

問候

路易吉