zoukankan      html  css  js  c++  java
  • 轮询技术

    1.轮询:浏览器不断地向服务器返送ajax请求。配合使用定时函数 setInterval 或者 settimeout 定时发送ajax请求。

    <script>
         setInterval(function(){
         $.get('server.php',{id:5},function(data){
            //根据服务器返回的数据进行下一步操作,
       });
    },300);
    
    </script>

    2.长轮询(comet):轮询是不断地发送ajax,而长轮询是浏览器发送一次ajax之后,服务器会去搜索数据(数据库等等),如果服务器没有搜索到数据,那么就不会响应客户端。在浏览器发送请求后到服务器返回给客户端数据这中间空白的时间,就是处于阻塞状态,阻塞状态持续到服务器做出响应。然后重复上述的过程,就是长轮询。

    <script>
    function  longLunXun(){
        $.get('server.php',{id:3},function(data){
            alert(data);
            longLunXun();  //递归来实现不断发送,没有结束,一直发。
         });  //递归和定时函数不同的是,递归会在服务器作出响应后,才会再次发送ajax请求
    
    }  
    longLunXun(); //我觉得这行代码不需要,不过还没有测试,等测试过就知道了
    </script>

    服务器端处理:服务器端是需要有个死循环的,死循环里不断地查询数据。死循环后面就没必要写代码了,因为不可能执行。注意是死循环,不是循环。

    3.sse :    和轮询有几分相似,SSE是客户端请求服务器后,服务器每隔一段时间向客户端发送数据(注意是单向的)。

    4.socket:客户端和服务器端双向实时通信。

    5.socket使用:安装依赖包:express、ejs、socket.io。(前两个是为了更好更方便使用socket.io)

      (1)新建一个目录,打开命令行:

    npm  install express
    npm install socket.io
    npm  install  ejs

          (2)安装好依赖包后,开始写代码

    //引入express包
    var express = require('express');
    //create application 
    var app = express();
    //模板引擎引入
    app.use(express.static('./static'));
    app.set('views','./views');
    app.set('view engine','ejs');
    
    var server = require('http').createServer(app);
    //创建socket服务
    var io = require('socket.io')(server);
    //路由规则
    app.get('/',function(req,res){
        res.render('index');
    });
    
    io.on('connection',function(socket){
        socket.on('message',function(data){
            console.log(data);
        });       //on接收数据,  message可以理解为通道名,发送和接收数据所走的通道
    
        var i = 0;
        setInterval(function(){
            socket.emit('message',i++);
        },2000);      //emit发送数据,,定时发送
    })
    
    server.listen(8080);

       (3)上面服务器端代码写好,接下来是客户端代码。首先需要创建一个文件。因为服务端代码设置的是views,所以创建一个views目录,里面创建一个ejs为后缀的文件。

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>
            //先引入socket文件
        <script type="text/javascript" src="/socket.io/socket.io.js"></script>
        <script type="text/javascript">
            var socket = io();
            //接收
            //message 通道名或者说是频道名
            socket.on('message',function(data){
                console.log(data);
            });
    
            //sent
            var i = 100;
            setInterval(function(){
                socket.emit('message',i++);
            },2000);
        </script>
    </body>
    </html>

        (4)启动:在命令行输入node  app.js启动。在firbug中可以查看数据。

  • 相关阅读:
    ACM学习历程—UESTC 1218 Pick The Sticks(动态规划)(2015CCPC D)
    ACM学习历程—UESTC 1217 The Battle of Chibi(递推 && 树状数组)(2015CCPC C)
    A*算法的实现
    codevs1011 数的计算 2001年NOIP全国联赛普及组
    一场ACM一场梦——我的一年
    HDU 4422 The Little Girl who Picks Mushrooms ( 模拟)
    HDU4277 USACO ORZ(dfs+set)
    HDU4272LianLianKan(dfs)
    HDU4268 Alice and Bob(贪心+multiset)
    hdu 5444 Elven Postman(二叉树)——2015 ACM/ICPC Asia Regional Changchun Online
  • 原文地址:https://www.cnblogs.com/bneglect/p/10424861.html
Copyright © 2011-2022 走看看