1、安装socket插件,配置参数

(1)配置面板参数

83382fceb814629f463bf35961225cd3.png

提示: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文件中)如下:

58f040c90edbe30e5f56f71f13f1f5bd.png

登录后,触发上面的推送接口,收到消息的效果图如下:

bfbc46ca6bf3b21d36fe978be57c0a92.png

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,推送一条消息

页面效果如下:

445e62027f08e7658564e86a4bc7abd6.png

5、常见问题解决方案

(1)由于通过正则读取了token.key进行请求签名计算,所以token、缓存前缀、key这3个字符串本身不能删除和修改顺序,key值修改无影响;如果提示签名错误可查看是否修改了这里

'token'                  => [
        // 驱动方式
        'type'     => 'Mysql',
        // 缓存前缀
        'key'      => 'Wp14xxxxxxxxxxxc6ygd2BRX',
        // 加密方式
        'hashalgo' => 'rixxxxx0',
        // 缓存有效期 0表示永久缓存
        'expire'   => 0,
],
最后修改:2024 年 11 月 19 日
如果觉得我的文章对你有用,请随意赞赏