[問題] 聊天室, 偵測使用者是否在線

看板Google (谷歌Google)作者 (悟道修行者)時間14年前 (2011/07/16 19:27), 編輯推噓0(004)
留言4則, 3人參與, 最新討論串1/1
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
如果你的資料只存boolean, 那幹嘛不直接判斷timestamp有沒
07/16 20:07, 1F

07/16 20:07, , 2F
有更新就好?
07/16 20:07, 2F

07/16 20:09, , 3F
恩...我比較笨一點 看不懂 這和Google有關係?
07/16 20:09, 3F

07/17 19:46, , 4F
無關
07/17 19:46, 4F
文章代碼(AID): #1E8NMhgG (Google)
文章代碼(AID): #1E8NMhgG (Google)