美文网首页
实时交互

实时交互

作者: crazy__stone | 来源:发表于2016-08-22 09:25 被阅读0次

    socket.io

    1. Server-Sent Events(SSE) 允许服务端推送数据到客户端:性能较好、实时性较强,但存在一定的兼容性问题,由于是在HTML5中提出的标准,IE全系浏览器都不支持,并且原生手机应用也没有提供支持。
    2. comet技术
    3. HTTP轮询
    4. nodejs socket实现实时消息推送

    在nodejs中主要牵涉到的模块:(net及net readline)

    var net = require('net');
    var server = net.createServer((socket) => { var time = getTime(); 
    //加入一个标志
    //加入到客户列表中  
    var name = clients.add( socket ); 
    //接收客户发过来的信息 socket.on('data', function(data) {
     // guangbo(data, socket);
    // 接受来自客户端的信息 
    console.log('收到数据啦---' ); 
    console.log(data.toString()); 
    //发送给所有人
    clients.sendAll(socket,data);
     }); 
    //客户关闭了连接 
    socket.on('close', function(data) { 
      console.log('客户走了~: ' + socket.remoteAddress + ' ' + socket.remotePort);
     //删除客户 
    clients.del(socket);
     //发送给所有人 
    clients.sendAll(socket, '有人走了!当前聊天人数:' + clients.length());
     }); 
    console.log('有人连了,客户端数量:'+ clients.length() ); 
    console.log('有人连了,客户端数量:'+ clients.length() ); 
    
    socket.write(time +' 欢迎进来聊天~ ' + name + '!\n' + '当前聊天人数:' + clients.length());
     clients.sendAll(socket, '有人进来了!当前聊天人数:' + clients.length());
    }).on('error', (err) => { 
    // handle errors here
     throw err;
    });
    clients = new Object();
    clients.list = [];
    clients.sendAll = function(socket,data){
      console.log('开始发送给全部人啦!!'); 
      for(var i=0 ; i < this.list.length ; i++){
        if(socket !== this.list[i]){ 
            var o = this.list[i]; 
            //检查socket是否可以写
            if (o.writable) { 
              console.log('发送给:' + o.name);
             o.write('-----\n' + getTime() + '\n' + socket.name + '说:\n'); 
              o.write(data); o.write('-----'); } else { console.log('socket 失效了:' + o.name); 
            //socket断开了什么的,就不能发送啦,需要删除这个连接
             this.del(o); 
            }
         } 
    }

    相关文章

      网友评论

          本文标题:实时交互

          本文链接:https://www.haomeiwen.com/subject/meiwsttx.html