2010-12-13 94 views
2

我有一個簡單的聊天客戶端設置,允許用戶使用用戶名登錄並存儲它們在SQL數據庫中寫入的消息。每3秒鐘,數據庫就會打印所有行。所以它基本上是一個聊天客戶端。如何知道用戶何時關閉瀏覽器?聊天應用程序

我想保留誰在線的列表。我怎樣才能做到這一點?當有人關閉瀏覽器時,我該如何感覺?

現在我拉用戶名作爲

$name = $_COOKIE["name"]; 

,如果這個值是空的,我知道他們離開。但是一旦他們離開了,知道他們的用戶名是什麼時候已經太晚了,所以我無法追蹤到底是誰離開了。

想法?我相當新的PHP,JavaScript和HTML,所以請記住:)

+0

@ ehmad1協作方式的人!豎起大拇指! – Mike 2010-12-14 07:19:39

回答

1

放到網上的用戶在一個表中,將有一個名爲像「lastSeen」更新這一領域與AJAX調用每隔幾秒鐘場..

Ajax調用進行成才這樣的:

window.setInterval(function() { 
    $.ajax({  
     url: _URL_ENGINE + "/updateLastSeen/?userid=" + userID, 
     success: function(data) { 

     } 
    }); 
}, 2000); // 2000 means 2 seconds 

現在要查詢的在線玩家列表ü可以查詢他們像

select * from players WHERE lastSeen > DATE_SUB(NOW(), interval 40 SECOND) 

希望這有助於

0

使用onbeforeunload事件。

+0

繼承人樣本http://www.4guysfromrolla.com/demos/OnBeforeUnloadDemo1.htm – basarat 2010-12-13 09:34:05

+4

這不是一個可靠的方法,如果你發送一個AJAX請求時,他們離開它可能不會及時處理 – fire 2010-12-13 09:36:08

3

假設您使用AJAX每X秒拉入聊天消息,請使用該用戶的當前時間戳更新您的用戶表。然後任何有時間戳的人說10秒以上,你就會知道他們已經離開了這個頁面。

+0

!我也加了一些代碼示例 – ehmad11 2010-12-13 10:09:59

5

當有人關閉窗口時,很難發送最後一個請求到服務器,因爲當用戶希望窗口關閉時,瀏覽器通常不會等待JS執行完成(如onbeforeunload)。

每當遇到這樣的情況時,我傾向於使用onbeforeunload發送最終請求(發生快速並且通常在瀏覽器窗口關閉之前完成),但也實現超時功能。超時功能的工作原理如下:

每次用戶向服務器發送一些信息時,服務器都會將其識別爲「仍然存在」。同時,客戶端設置一個45秒的定時器。如果用戶在45秒內沒有輸入任何內容,客戶端會自行發送一個「靜止」信號以保持連接。

現在,服務器應該每60秒執行一次removeInactive()例程(允許15秒的慢連接裕量,因此45/60秒),這將刪除最後沒有發送「靜止」信號的任何用戶60秒。

到目前爲止,這個系統對我來說工作得很好,你可以自己嘗試一下。

相關問題