首先測試環境是windows,linux的之後再說。php
首先我須要的是一個相似系統廣播的東西,因此用的是workerman的web-msg-sender,先去workerman的官網下載https://www.workerman.net/web-sender前端
下載成功後將文件解壓放到項目目錄下linux
主要說下幾個文件的做用 首先是start.php 是wokerman的啓動文件,在linux下運行這個文件,若是是windows下,直接雙擊start_for_win.bat文件web
啓動文件主要也是啓動了start_io和start_web這兩個文件數據庫
start_web文件是啓動一個webservice,用於吐頁面信息,因此這個其實不是必需要啓動的windows
start_io文件宅這裏應該是比較關鍵的,先看一下代碼socket
// PHPSocketIO服務 $sender_io = new SocketIO(2120); // 客戶端發起鏈接事件時,設置鏈接socket的各類事件回調 $sender_io->on('connection', function($socket){}
2120是IO服務的端口,前端經過這個端口可以監聽到各類事件測試
1.login事件 當用戶進入這個頁面(包括刷新)就會更新一個uid,UID是咱們識別用戶的標誌ui
2.disconnect 當客戶端斷開鏈接是觸發(通常是關閉網頁或者跳轉刷新致使)spa
3.workerStart 當$sender_io啓動後監聽一個http端口,經過這個端口能夠給任意uid或者全部uid推送數據
$sender_io->to($to)->emit('name', 'msg');//$to是要給誰發送消息,是uid的值 name是前端接收的事件名 msg是發送的消息
// 一個定時器,定時向全部uid推送當前uid在線數及在線頁面數 Timer::add(1, function(){ global $uidConnectionMap, $sender_io, $last_online_count, $last_online_page_count; $online_count_now = count($uidConnectionMap); $online_page_count_now = array_sum($uidConnectionMap); // 只有在客戶端在線數變化了才廣播,減小沒必要要的客戶端通信 if($last_online_count != $online_count_now || $last_online_page_count != $online_page_count_now) { $sender_io->emit('update_online_count', "當前<b>{$online_count_now}</b>人在線,共打開<b>{$online_page_count_now}</b>個頁面"); $last_online_count = $online_count_now; $last_online_page_count = $online_page_count_now; } });
這裏的話是IO文件裏使用的 ,1就是定時的時間
另外還用到了wokerman的數據庫操做,下面直接放地址
1.http://doc.workerman.net/640201
2.https://blog.csdn.net/chenluliang/article/details/70170932
同時感謝過程當中熱心幫忙的前輩