1、安装socket插件,配置参数
(1)配置面板参数
提示:session name的值需要跟php配置中的session.name相同,端口号需要在安全组中放行。
(2)在/application/config.php中增加以下配置
// 驱动方式 支持redis memcache memcached
'type' => 'redis',
// 是否自动开启 SESSION
'auto_start' => true,
'host' => '127.0.0.1',
'port' => 'xx',
'password' => 'xxx',
2、启动websocket服务
# 切换到start.php目录下
cd ./addons/websocketpush/library/web-msg-sender
# 以后台守护的方式启动start.php
php start.php start -d
# 以调试的方式启动start.php,测试时用这种方式启动,可以在命令窗口看到打印数据,方便调试
php start.php start
# 停止
php start.php stop
# 重启
php start.php reload
3、推送消息给已登录的后台管理员
在任意一个控制器的方法中,触发以下代码。
// 给fa_auth_group表的name为 Admin group 的用户组,推送“后台消息”。
\addons\websocketpush\Websocketpush::pushToGroups('后台消息!', ['Admin group']);
// 给fa_admin表的id为 1和2 的用户,推送“后台消息”。
\addons\websocketpush\Websocketpush::pushToIds('后台消息!', [1,2,3]);
提示:
1、被推送的对象需要登录后台
,才能收到。
2、推送的消息将会以弹窗的形式出现。
3、注意上面配置的是http还是https
协议,如果是http协议,则后台管理员需要用http协议登录后台,才能收到消息,所以,建议网站不要配置强制https。
被推送的管理员登录后,sh命令窗口打印数据(打印代码是自己加的,在start.io.php文件中)如下:
登录后,触发上面的推送接口,收到消息的效果图如下:
4、与其他客户端的通信
(1)、将压缩包解压到文件夹,浏览器访问index.html,html的核心代码如下:
<script>
$(document).ready(function () {
// 连接服务端
// 随便定义一个uid
var uid = 'suiji001';
var socket = io('http://ip:端口');
// 连接后登录
socket.on('connect', function(){
socket.emit('login', uid);
});
// 后端推送来消息时
socket.on('new_msg', function(msg){
$('#content').html('收到消息:'+msg);
$('.notification.sticky').notify();
});
// 后端推送来在线数据时
socket.on('update_online_count', function(online_stat){
$('#online_box').html(online_stat);
});
});
</script>
socket连接成功后,后台给上面的用户suiji001,推送一条消息
页面效果如下:
5、常见问题解决方案
(1)由于通过正则读取了token.key进行请求签名计算,所以token、缓存前缀、key这3个字符串本身不能删除和修改顺序
,key值修改无影响;如果提示签名错误可查看是否修改了这里
'token' => [
// 驱动方式
'type' => 'Mysql',
// 缓存前缀
'key' => 'Wp14xxxxxxxxxxxc6ygd2BRX',
// 加密方式
'hashalgo' => 'rixxxxx0',
// 缓存有效期 0表示永久缓存
'expire' => 0,
],