2009-05-24 232 views
6

我有一個學校項目,我必須實現一個聊天應用程序,其服務器將是一個Java Web服務。實現聊天服務器作爲WebService

問題是,我一直認爲Web服務是一種調用遠程函數的方式,我不知道如何在Web服務上保持「會話」活動狀態,也不知道如何跟蹤所有當前在聊天的人,房間等。

+0

下次你看到你的英語老師告訴他/她你原來的問題的副本。歡迎來到StackOverflow。 – UnkwnTech 2009-05-24 08:26:07

+2

但是,只要意義被傳達,顯然在互聯網上的語法並不重要 – Chii 2009-05-24 08:58:36

+1

語法在你去的任何地方都是非常重要的。 – 2009-05-24 09:17:26

回答

6

據我所知,聊天服務器在初始連接後應該知道它的客戶端,並將所有客戶端消息發送給所有客戶端。這絕對需要某種會話維護。我認爲正確的做法如下:

  1. 客戶端調用Web服務'握手'並提供一些最小標識細節。
  2. 服務器返回包含唯一客戶端標識符的確認。
  3. 客戶端調用Web服務'消息'併發送一條新消息及其標識符。
  4. 服務器通過標識符識別客戶端,將消息分發給所有客戶端。

我不太確定郵件分發應該如何工作,因爲Web服務本質上是一種拉服務而不是推送。也許客戶端應該公開自己的Web服務以供服務器調用。

希望這有助於

尤瓦= 8-)

0

我不知道Java,所以這個答案將是語言不可知的。

在我看來,最簡單的方法來做到這一點,而不需要在服務器上運行一個進程將存儲所有的數據在數據庫中。

這裏是一個將需要完成的基本的東西的簡短列表:

  1. 需要一個表,用於認證
  2. 用戶名和密碼的列表需要一個表中使用當前登錄
    A.需要最後接觸
  3. 的時間戳字段當用戶沒有什麼更新的最後一個聯繫人字段爲當前時間
  4. 如果用戶的最後接觸時間>當前時間+ 2分鐘後,他們已註銷
  5. 客戶端應用程序需要向服務器發送週期性消息以說「我還在這裏」
  6. 您需要找到一種方法來確定消息何時發送以及何時更新客戶端顯示已收到消息,我將離開你。

如果你仍然需要一些幫助,這裏應該是一個AJAX/ASP.Net聊天應用程序,應該(我沒有看它的源代碼)的工作方式大致相同。

0

我寫了存儲在數據庫中,一個輸入表單框架和接收的輸出幀的背景,一切的服務的聊天引擎html流。

如果你想跳過服務部分,只通過web服務實現,你需要實現至少兩個操作:發佈輸入,GetLatestChanges接收聊天輸出,使用一些Javascript魔術翻譯成HTML。

當然,您需要跟蹤房間,用戶,消息,哪些用戶收到哪些文本等,如Unknwntech所描繪的。

1

您可以考慮實施COMET解決方案。這將有效地爲您提供推送通信,從而消除延遲,這是聊天應用程序的非常棒的功能。

如果你想要去的黃金,考慮實施更先進的功能:自動轉換成鏈接

  • 單獨聊天室
  • 主持人功能

    • 拼寫檢查
    • 網址/電子郵件地址(終止聊天,踢用戶)
    • 像「用戶正在輸入...」的事件信息
    • 狀態(可用,bu SY,而去...)
    • 化身
    • ...