基于PHPSocket.io的站内消息提醒

框架是用的tp5.1

使用composer 安装   composer require workerman/phpsocket.io   扩展

然后public入口出新建socket.php

具体代码如下:

<?php
// [ 应用入口文件 ]
namespace think;
// 加载基础文件
require __DIR__ . '/../thinkphp/base.php';
// 执行应用并响应(绑定)
Container::get('app')->bind('socket/Server/index')->run()->send();//这段代码意思就是绑定模块socket以及对应的控制器和方法。

然后就是新建模块
application/socket目录
新建控制器Server.php 代码

<?php
namespace appsocketcontroller;
use PHPSocketIOSocketIO;
use PredisClient;
use WorkermanWorker;

class Server
{
    private $redis;
    public function __construct()
    {
        $config = config('redis.');
        $this->redis = new Client($config);
    }
    public function index(){
        header("Access-Control-Allow-Origin: *");
        $io = new SocketIO(5881);

        $io->on('workerStart', function()use($io) {
            $worker = new Worker('http://0.0.0.0:5880');
            $worker->onMessage = function($connection, $request)use ($io)
            {
                $data = $request->post('msg');
                if ($data){
                    $io->emit('new_msg',$data);
                    $connection->send('ok');
                }
                $connection->send('fail');
            };
            $worker->listen();
        });

        $io->on('connection', function ($socket) use ($io) {});


        Worker::runAll();
    }

}
Worker的开启:监听一个http端口,通过http协议访问这个端口可以向所有客户端推送数据(http://ip:5880?msg=xxxx)
前端代码
<script src='https://cdn.bootcss.com/socket.io/2.0.3/socket.io.js'></script>
<script>
    layui.use(['layer','notice'], function(){
        var notice = layui.notice;
        notice.options = {
            closeButton:true,//显示关闭按钮
            positionClass:"toast-top-center",//弹出的位置,
            showDuration:"500",//显示的时间
            hideDuration:"1000",//消失的时间
            timeOut:"5000",//停留的时间
            extendedTimeOut:"1000",//控制时间
            showEasing:"swing",//显示时的动画缓冲方式
            hideEasing:"linear",//消失时的动画缓冲方式
            iconClass: 'toast-info', // 自定义图标,有内置,如不需要则传空 支持layui内置图标/自定义iconfont类名
            onclick: null, // 点击关闭回调
        };
        var socket = io('http://服务器IP:5881');
        // 后端推送来消息时
        socket.on('new_msg', function (msg) {
            notice.error(msg);
        });
    });

</script>

上面使用了一个layui的消息提醒插件,消息效果


然后就是通过curl访问地址:http://ip:5880 传递参数['msg'=>'你有新的账户异常,请注意'] 即可


原文地址:https://www.cnblogs.com/guoyachao/p/13496303.html