• 常轮询的方式 何苦


    常轮询的方式:

    1. 长连接

    即服务器端不断开联系,PHP服务器端用ob系列函数来不停的读取输出,但是相当耗费服务器资源。

    1. Flash socket

    flash的as3语言,创建一个socket服务器用来处理信息。

    1. 轮询

    顾名思义就是不停地发送查询消息,一有新消息立刻更新,但是会有多次无用请求。(点带宽,客户端消耗CPU及内存)

    1. 长轮询

    是轮询的升级版,需要服务器端的配合。(服务器端消耗CPU及内存)

    1. websocket

    HTML5的通信功能,建立一个与服务器端的专用接口ws协议来进行通讯,兼容可能成为问题

    长轮询的服务器端实现:

    数据库:标记位,记录内容是否推送过 is_read
    PHP:

    设置超时时间与当前时区

    这里的超时时间不会生效,因为php.ini nginx.cof中都有关于超时时间的设置

    //关于循环中unset()反而会增加内存,这一点我没有试
    //设置脚本超时时间为无限,不然在过了超时时间后脚本会自动关闭,轮询失败。
    set_time_limit(0);
    date_default_timezone_set('PRC');
    //判断当前是否是ajax请求
    if (IS_AJAX && IS_POST) {
        $i = 0;  //设置这个有个好处,就是在服务器30秒连接超时前自己释放连接
        while (true) {    //进入无限循环
            //根据条件查询数据库每次取一条数据,为了好处理
            if ('数据') {//当有未读信息时读取信息
                //是否有别的条件 -------------------
                //注意,此处要处理一下自己点赞后直接跳出循环
                if('当前是自己'){
                    break;//输出信息后退出while循环,结束当前脚本
                }
                //更新当前数据状态为已读取
                if('更新成功'){
                    //处理返回的数据
      
                    echo json_encode('要返回的数据,注意里面必须为UTF-8');
                    break;//输出信息后退出while循环,结束当前脚本
                }
                 
            }
            sleep(1);//如果没有信息不会进入if块,但会执行一下等待?秒,防止PHP因循环假死。usleep一微秒等于百万分之一秒。
            if($i > 28){  //这个地方就是28秒退出循环
                break;
            }
            $i++;
        }
    }
    

    js

    //这个是请求的ajax
    var link = function(){
      $.ajax({
        url:url,
        type:'post',
        data:data,
        dataType:'json',
        success:ajax_callback,
        error:link  //这个地方有意思嘛,请求失败后重新发起请求
        });  
    };
    //这个是请求成功后的回调
    var ajax_callback = function(data){
      //数据处理去吧
      setTimeout(link, 300);  //300毫秒后接着去请求去 注意是方法名不还()
    }
    

    做这个之后一定要测试注意服务器cup与内存

  • 相关阅读:
    为什么表单中post接受数据是获取name值而不是id值
    YII2 定义页面提示
    yii相关手册文档
    使用后台程序的第一个表单Form
    使用后台程序的第一个程序hello word
    yii:高级应用程序搭建数据库的详细流程
    详细步骤教你安装yii高级应用程序和配置composer环境
    sys模块
    os
    time和datetime
  • 原文地址:https://www.cnblogs.com/fuqian/p/16267470.html
Copyright © 2020-2023  润新知