聊天室, 偵測使用者是否在線 - Google

By Christine
at 2011-07-16T19:27
at 2011-07-16T19:27
Table of Contents
hi, 想必大家在寫聊天室的時候, 都會遇到這個問題
用 JavaScript 的 onunload 只要碰到突然離線(ex: 網路線拔掉)就沒用了
如果是寫個程式, 定期(每隔1秒) send HTTP request 給 server 端的程式,
例如每一秒都用 AJAX send "True" 給 server
也就是把每個 user 最後回報的時間更新進 MySQL 裡,
然後就可以偵測, 看哪個使用者超過了 20 秒都沒有回報, 就知道他下線了。
問題來了, 假如使用者離線了, 沒有 php 程式可以運作, 根本沒有辦法
「看看哪個使用者超過了 20 秒都還沒回報」啊!
如果把這個行為, 交給其他還在線上的人, 由他們來執行 php 程式
好像也不太理想, 假設聊天室有一萬位 user 好了,
每隔 1 秒, 就有一萬次的 MySQL query:
"UPDATE users SET whether_login='False' where
last_report_time-NOW()>......" (詳細 syntax 我沒背)
伺服器負荷不會太大嗎?
第二個問題是, 假設整個聊天室就只有你一個人,
結果你家網路線突然被拔掉. 在 MySQL 那裡,
你的 whether_login 欄位還是個 True 呢,
整個聊天室裡也只有你一個人, 你一走,
就沒有人可以幫你把 whether_login 調成 False 了
改天你登入的時候, 因為 whether_login 還是 True,
所以系統認為是重複登入, 不讓你登入了, 那怎麼辦呢?
--
Tags:
Google
All Comments

By Harry
at 2011-07-20T03:53
at 2011-07-20T03:53

By Rachel
at 2011-07-24T17:59
at 2011-07-24T17:59

By Dora
at 2011-07-29T07:33
at 2011-07-29T07:33
Related Posts
google +和 FB的比較

By Lauren
at 2011-07-16T19:17
at 2011-07-16T19:17
關於Chrome...

By Mia
at 2011-07-16T18:31
at 2011-07-16T18:31
picasa免費容量不計算的畫素又提昇了?(800->2048)

By Andrew
at 2011-07-16T16:46
at 2011-07-16T16:46
Google地圖帶來了即時交通資訊

By Sarah
at 2011-07-16T14:35
at 2011-07-16T14:35
7日鑑賞Google不妥協 北市府:再寬限兩週

By Valerie
at 2011-07-16T11:30
at 2011-07-16T11:30