[問題] 聊天室, 偵測使用者是否在線
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,
所以系統認為是重複登入, 不讓你登入了, 那怎麼辦呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.112.114.165
→
07/16 20:07, , 1F
07/16 20:07, 1F
→
07/16 20:07, , 2F
07/16 20:07, 2F
→
07/16 20:09, , 3F
07/16 20:09, 3F
→
07/17 19:46, , 4F
07/17 19:46, 4F
Google 近期熱門文章
PTT數位生活區 即時熱門文章