3 回答

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊
由于HTTP屬于無狀態(tài)短鏈接,真實(shí)在線是不可知的,因此業(yè)內(nèi)一般的做法都是計(jì)算一個(gè)大概值,例如“最近10分鐘內(nèi)刷新過頁面的人數(shù)”即認(rèn)為是同時(shí)在線人數(shù)。(當(dāng)然另外一種是 @cubianyu 所說的長連接或偽長連接,可以做到更精準(zhǔn)但在一般web情況下極大的增加了服務(wù)器消耗,除非你本身就是要做web聊天那種頻繁交互的網(wǎng)站否則還是算了)
一般的做法為:
登錄用戶用戶名做key,非登錄用戶IP做key。任何頁面被刷新一次之后就往數(shù)據(jù)庫(或緩存或內(nèi)存)中寫入一條記錄:
username=userA, lastRefreshTime=2012-12-20 12:12:12.000
另外做一個(gè)定時(shí)器例如每隔1分鐘清理一下表中l(wèi)astRefreshTime到現(xiàn)在超過10分鐘的人數(shù)。(定時(shí)器可以用Quartz做也可以簡單點(diǎn)自己搞個(gè)static變量來做)
最后,在線人數(shù)就是這個(gè)表的count。
P.S. “10分鐘”這個(gè)間隔可以自己來調(diào)整,時(shí)間越長在線人數(shù)看起來就越多,越短就看起來越少,一般的BBS時(shí)長會在20-60分鐘之間
添加回答
舉報(bào)