首先测试环境是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
同时感谢过程当中热心帮忙的前辈