关于轮询技术
原文链接:http://www.cnblogs.com/bneglect/p/10424861.html
1.轮询:浏览器不断地向服务器返送ajax请求。配合使用定时函数 setInterval 或者 settimeout 定时发送ajax请求。
2.长轮询(comet):轮询是不断地发送ajax,而长轮询是浏览器发送一次ajax之后,服务器会去搜索数据(数据库等等),如果服务器没有搜索到数据,那么就不会响应客户端。在浏览器发送请求后到服务器返回给客户端数据这中间空白的时间,就是处于阻塞状态,阻塞状态持续到服务器做出响应。然后重复上述的过程,就是长轮询。
服务器端处理:服务器端是需要有个死循环的,死循环里不断地查询数据。死循环后面就没必要写代码了,因为不可能执行。注意是死循环,不是循环。
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为后缀的文件。
//先引入socket文件
(4)启动:在命令行输入node app.js启动。在firbug中可以查看数据。
转载于:https://www.cnblogs.com/bneglect/p/10424861.html