大神都是如何查看網頁的同時線上人數啊?

來源:互聯網
上載者:User
  1. 網頁後台是基於PHP+Mysql+Redis+Nginx的,想問下查看網頁同時線上(同時查看網頁)的人數有多少,有什麼方案呀?

回複內容:

  1. 網頁後台是基於PHP+Mysql+Redis+Nginx的,想問下查看網頁同時線上(同時查看網頁)的人數有多少,有什麼方案呀?

這裡有個基於workerman開發的非常精確的統計線上人數的開源組件 http://www.workerman.net/web-sender

效果:
能夠非常即時的統計線上使用者數,甚至統計使用者目前開啟了多少個頁面。效果如下

線上demo見http://www.workerman.net/頁面底部

原理
原理是頁面開啟後js建立一個與服務端的socket長串連,頁面通過這個socket串連發送一個uid登入請求,服務端就知道這個串連是哪個使用者的,如果使用者的所有串連都關閉了,說明使用者下線。同時根據有多少個socket串連,就知道整個網站有多少頁面正在開著。由於是socket可以即時監測到串連事件和串連斷開事件,所以非常資料是非常即時的。服務端採用workerman,非輪詢,效能非常高。

服務端使用方法
下載後直接在命令列 php start.php start -d
啟動介面類似如下:

用戶端使用方法

其它
這個組件不僅可以統計線上使用者資料,更強大的是可以在服務端向任意使用者的網頁即時推送資料,效果類似如下

即時性要求不那麼高的話,就基於當前有效session數量(基於cookie)

即時性要求高的話,使用websocket統計串連數

首先,得確定一下什麼是線上,簡單的做法就是固定時間比如5分鐘內活動的都算線上。
剩下的就簡單咯,記錄一下使用者最後活躍時間(頁面重新整理或者ajax都行),需要統計時count出距離目前時間<=5min的。

記錄Session數量即可

  1. 統計session數量,統計時間跨度取決於session生命期。

  2. 利用檔案+cookie,迴圈遍曆檔案中cookie個數。 不過既然你有redis,也可以直接用redis 替代檔案讀寫。
    php統計線上人數

我們不用cookie和伺服器端session,但剛好有這個需求,最後是用websocket看的,原以為很麻煩,沒想到還挺容易的

我常用的一個方法:

1、 建立一張 mysql 的記憶體表(優秀的讀寫效能以及快速增刪)

CREATE TABLE `xx_session` (  `user_id` INT(10) UNSIGNED NOT NULL DEFAULT '0',  `expire` INT(10) UNSIGNED NOT NULL DEFAULT '0',  `ip` INT(10) UNSIGNED NOT NULL DEFAULT '0',  PRIMARY KEY (`user_id`),  KEY `ip` (`ip`),  KEY `expireIndex` (`expire`)) ENGINE=MEMORY DEFAULT CHARSET=utf8
  • user_id:使用者id

  • expire:用於告訴系統到期時間

  • ip:ip2long 轉成的整型ip

附:記憶體表有一個問題,就是重啟後所有資料會消失。這點在使用中請務必注意。

2、使用者每次操作時 replace into 進記憶體表:

REPLACE INTO xx_session (user_id, expire, ip)VALUES(10, 1000000000, 102933800);

3、 使用者退出時:

DELETE FROM xx_session WHERE user_id=10;

4、 線上使用者到期,可以通過 Mysql 的 Event Scheduler 來定時刪除到期使用者:

CREATE DEFINER=`root`@`%` EVENT `30minute` ON SCHEDULE EVERY 30 MINUTE STARTS '2012-05-30 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN        DELETE FROM xx_session WHERE expire<= UNIX_TIMESTAMP();    END;

注意:
mysql 要啟用 Event Scheduler:

查看是否啟動:

SELECT @@event_scheduler;

啟動方法1(不重啟,但重啟失效):

SET GLOBAL event_scheduler = 1;

啟動方法2(永久生效),在 mysql 啟動時加上:

mysqld ... --event_scheduler=1

啟動方法3(永久生效),在 my.cnf 中、[mysqld]裡,加入:

event_scheduler=ON
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.