2012-05-21 28 views
2

我開發了一個基於網絡的應用程序,其中登錄的用戶應該向服務器發送消息,告訴他每3秒仍處於聯機狀態。該消息隨後由服務器處理,並在Mysql中調用存儲過程以將用戶的狀態設置爲聯機。 我看過類似的問題,其中Comet和Ajax進行了比較(herehere),但考慮到3秒延遲是可以接受的,並且最大用戶數1000在系統中聯機,使用Ajax是一個明智的選擇,或者Comet應該是用過的?Ajax vs Comet(不是聊天應用程序)

+0

正如您所描述的,您需要每3秒鐘將數據從客戶端發送到服務器。所以爲了您的需要,您可以使用AJAX。無論何時您想將信息從服務器推送到信息可用性未知的客戶端,您都可以考慮Comet。 – Seshagiri

+0

websockets ftw ;-) – zerkms

+0

Web套接字不是一個選項,因爲應用程序應該能夠在IE上運行 –

回答

1

對於這種功能彗星是比較合適的:

  • 你的客戶發送郵件(我在線)
  • 您的服務器廣播處理過的消息(用戶X仍然在線)

以ajax的方式,你只向服務器提供消息。

爲了以ajax的方式獲得「廣播效果」。你最終會做類似彗星的事情,但帶寬效率較低。

阿賈克斯:

  • 客戶端發送服務器 - 我在
  • Server進程
  • Server發送回用戶客戶列表中

在這種情況下,每一個客戶問每3秒鐘將數據庫中的COMPLETE「in」列表中。

在彗星:

  • 客戶端X發送服務器 - 我在
  • Server進程
  • 服務器發送回客戶端小號用戶X仍然在線

在這種情況下,每個客戶端都會每隔3秒告訴服務器他所在的位置。 服務器發送回每個連接的客戶端ONLY x是仍處於

彗星僅僅是播放回來,郵件推送到客戶端 阿賈克斯是推動客戶的信息到服務器的技術,而無需刷新所有頁面的技術。

引述維基百科: http://en.wikipedia.org/wiki/Comet_%28programming%29

彗星是由其他幾個名稱,包括阿賈克斯推反轉Ajax,雙向的Web,HTTP流,和他人之間的HTTP服務器推送。

,所以還是彗星:)

如果你不播什麼,然後簡單的Ajax是最好的選擇

+0

服務器不會將任何內容廣播回客戶端。它只是在客戶端收到消息時調用Mysql中的過程。該過程基本上是一個SQL語句。 –

+0

然後阿賈克斯更合適 – Krilivye

0

在這種特殊情況下,因爲你不需要任何信息從服務器發送到客戶端,我相信Ajax是更合適的解決方案。客戶端每隔三秒鐘告訴服務器它已連接,數據庫已更新,並且已完成。

這當然可以使用Comet來完成,在這種情況下,您基本上會ping每個註冊的客戶端以查看它是否仍處於連接狀態。但是,您仍然需要針對每個響應客戶端的數據庫運行查詢,而且您仍然需要客戶端在初始連接時通知服務器。所以,在我看來,彗星會比它的價值更麻煩。唯一可能有意義的是,如果您可以ping每個註冊的客戶端並將響應存儲在內存中,那麼一旦所有客戶端被ping通,您就可以運行一個查詢來更新其所有狀態。這會讓您在客戶端斷開連接時立即知道,而不是等待超時。不幸的是,這超出了我對Comet的專業知識範圍,所以在這一點上,我無法幫助實際執行它。