zoukankan      html  css  js  c++  java
  • 基于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'=>'你有新的账户异常,请注意'] 即可


  • 相关阅读:
    crontab
    待重写
    待重写
    多套开发资源使用情况
    待重写
    待重写
    待重写
    docker安装es
    docker run启动时目录映射研究
    rabbitmq第二篇:使用插件实现延迟功能
  • 原文地址:https://www.cnblogs.com/guoyachao/p/13496303.html
Copyright © 2011-2022 走看看