2013-06-20 81 views
-1

我正嘗試創建登錄用戶的顯示列表。所以想象一下,在左側面板上,我有一個登錄人員列表。每當有新用戶登錄時,該列表將立即更新並顯示給所有其他人。如何動態更新用戶列表

我很難找到這個教程,因爲我不知道正確的詞組來搜索。請給我一個建議。

+1

看看[這裏] [1]。它應該爲你提供你需要的一切。 [1]:http://stackoverflow.com/questions/3583203/server-polling-with-javascript –

回答

1

當用戶登錄時,所有登錄的用戶都必須實時通知。

使用html5,您可以使用websockets。然而,在此之前有幾種不同的技術被稱爲comet

最幼稚的實現是老式的輪詢,其中每個客戶端會每隔X秒使用ajax詢問所有登錄用戶的列表來詢問服務器。同時,這可以用作檢測信號,以驗證用戶是否仍處於活動狀態,因爲某些用戶可能沒有使用註銷鏈接註銷並僅關閉該選項卡。

一步是稱爲長輪詢,而不是輪詢每X秒,一個單一的Ajax請求被髮送,並且服務器只有在發生某事件('有人登錄')時纔會響應。一旦客戶端收到響應,它立即發送另一個Ajax請求來重新建立連接。

這是值得了解的基本細節,但沒有必要重新發明輪子。我使用名爲pusher的服務。它還具有WebHooks,一旦連接被終止,就會提醒您,這對確定用戶何時關閉標籤而不註銷是有用的。

這些第三方服務如何工作?

他們需要你添加一個js代碼片段到你的html頁面,這個頁面將與他們的服務器建立連接。如果瀏覽器支持,則使用Web套接字,否則可以使用幾種後退方法之一,例如用於舊版瀏覽器的彗星或閃存。

當您希望發送信息時,您只需向服務發出發佈請求,然後該服務將通過已打開的連接提醒預期的客戶端。

1

這是一個相當廣泛的問題,答案將很大程度上取決於您的環境。你的網站是PHP的後端嗎?節點? Rails的?等等你如何存儲登錄用戶列表?

一旦你弄明白了,簡短的回答是「使用AJAX」,基本上你需要定期輪詢服務器端腳本詢問用戶列表(腳本可能從文件/數據庫讀取)。 jQuery的$.get方法可以做到這一點。當列表更改時,您將重新呈現您的HTML列表。

如果您對此過程的步驟有更多疑問,請告訴我。

+0

謝謝你的回答。我的腳本由PHP支持。我想知道是否應該在mySQL上存儲登錄用戶的列表,或者只是在服務器上存儲一個簡單的文本文件。 據我所知,AJAX會每隔一段時間查看一次記錄列表,並相應地更新到用戶的屏幕上。 –

+1

沒有必要重新發明輪子,在我的回答下面我建議使用像Pusher這樣的第三方服務。 – omarshammas

+0

同意。像Pusher這樣的東西也可能會好很多。但對於簡單和低流量的情況來說,這仍然相當容易。 – hamstu