• 技术文章 >后端开发 >PHP问题

    php怎样实现新订单提示功能

    (*-*)浩(*-*)浩2019-09-12 10:03:04原创58
    我们在做商城系统的过程当中,会要求做一个订单提醒的功能,即来新的订单会提醒。我实现的方法是有订单后就会提醒“您有新的订单,请注意查收!”

    解决方案

    ajax轮询(推荐学习:PHP编程从入门到精通

    轮询的方法比较简单,就是每过多少秒发起一次请求。如果项目中的订单不多,每隔多少秒发一次请求会对服务器有挺大的压力。

    <script>
        setInterval("order()",59000000);//每59秒刷新查询一次
        var last_count = {$count};
        function order() {
     
            var data = {
                'last_count':last_count
            };
     
            $.ajax({
                type: "POST",
                data: data,
                url: "{:url('Order/sendOrderNotice')}",//后台方法
                timeout: 60000,
                cache: false,
                async: false,
                dataType: "json",
                success: function(data) {
                    if(data.status == 1){
                        var audio = document.getElementById( "play" ); //浏览器支持 audio
                        audio.play(); //播放提示音
                        last_count = data.last_count;
                        setTimeout(function(){
                            window.location.reload();
                            }, 3000);
                    }
                }
            });
     
        }
     
    </script>

    上面就是这个解决方案的核心。后端的代码请根据自己的业务逻辑编写。

    Workerman

    Workerman是一款纯PHP开发的开源高性能的PHP socket 服务框架。

    Workerman不是重复造轮子,它不是一个MVC框架,而是一个更底层更通用的socket服务框架,你可以用它开发tcp代理、梯子代理、做游戏服务器、邮件服务器、ftp服务器、甚至开发一个php版本的redis、php版本的数据库、php版本的nginx、php版本的php-fpm等等。Workerman可以说是PHP领域的一次创新,让开发者彻底摆脱了PHP只能做WEB的束缚。

    实际上Workerman类似一个PHP版本的nginx,核心也是多进程+Epoll+非阻塞IO。Workerman每个进程能维持上万并发连接。

    由于本身常住内存,不依赖Apache、nginx、php-fpm这些容器,拥有超高的性能。同时支持TCP、UDP、UNIXSOCKET,支持长连接,支持Websocket、HTTP、WSS、HTTPS等通讯协以及各种自定义协议。

    拥有定时器、异步socket客户端、异步Mysql、异步Redis、异步Http、异步消息队列等众多高性能组件。

    订单监控页面端的代码:

    <script src='http://cdn.bootcss.com/socket.io/1.3.7/socket.io.js'></script>
    <script src="https://g.csdnimg.cn/??lib/jquery/1.12.4/jquery.min.js"></script>
    <script>
        // 连接服务端,workerman.net:2120换成实际部署web-msg-sender服务的域名或者ip
        var socket = io('http://www.tp5_test.com:2120'); //http://www.tp5_test.com换成自己的域名或者ip
        // uid可以是自己网站的用户id,以便针对uid推送以及统计在线人数,这个ID可以随便写
        uid = 1557062581000;
        // socket连接后以uid登录
        socket.on('connect', function(){
            socket.emit('login', uid);
        });
        <!--// 后端推送来消息时-->
        socket.on('new_msg', function(msg){
     
            //两种处理方式
     
            // 1 追加到页面元素中,可以做成页面的弹窗
            $("#msg").append(msg); 
     
     
            //2 播放提示应 :
            if(msg == 1){
                var audio = document.getElementById( "play" ); //浏览器支持 audio
                audio.play(); //播放提示音
            }
     
     
        });
        // 后端推送来在线数据时
        socket.on('update_online_count', function(online_stat){
            console.log(online_stat);
        });
    </script>

    后端代码:

    //这个方法我随便写了写,具体的处理就是在支付完成回调以后,用用send_workerman方法就可以了。我是用sends来模型支付完成以后的回调
    public function sends($id)
    {
        // var_dump($id);die;
        if($id == 1){
          $this->send_workman($id);
        }else{
          echo '没有发送消息';
        }
    }
    
    
    /**
     * @route('send_workman')
     */
    public function send_workman($id)
    {
        $to_uid = '1557062581000'; //和页面的uid一致,不填写也可以
        // 推送的url地址,使用自己的服务器地址
        $push_api_url = "http://www.tp5_test.com:2121/";
        $post_data = array(
            "type" => "publish",
            "content" => $id,
            "to" => $to_uid,
        );
        $ch = curl_init ();
        curl_setopt ( $ch, CURLOPT_URL, $push_api_url );
        curl_setopt ( $ch, CURLOPT_POST, 1 );
        curl_setopt ( $ch, CURLOPT_HEADER, 0 );
        curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post_data );
        curl_setopt ( $ch, CURLOPT_HTTPHEADER, array("Expect:"));
        $return = curl_exec ( $ch );
        curl_close ( $ch );
        var_export($return);
    }

    以上就是php怎样实现新订单提示功能的详细内容,更多请关注php中文网其它相关文章!

    phpstudy集成环境下载
    本文原创发布php中文网,转载请注明出处,感谢您的尊重!
    专题推荐:php
    上一篇:php怎样应对高并发 下一篇:PHP怎样连sqlserver

    相关文章推荐

    • 传值和传引用的区别PHP• 常用的php框架区别和特性• 不需要自己搭建php运行环境• 宝塔面板php无法使用

    全部评论我要评论

  • NULL

    第二个workerman 还缺个workerman 服务端逻辑代码 不会是传参自动转发吧 自动转发也得贴出代码看一眼呀

    2019-09-12

  • 取消发布评论发送
  • 1/1

    PHP中文网