以前用PHP实现过,详情点击这里查看《Nginx中的PHP的缓冲问题》

无论用java、.net还是python都是可以实现bigpipe的…

 

拿那篇文章中的php显示页做示例:

Node.js实现的BigPipe

先输出页面的主体结构:

Node.js实现的BigPipe

然后按顺序更新页面的内容:

Node.js实现的BigPipe

Node.js实现的BigPipe

Node.js实现的BigPipe

2s后输出header

4s后输出content

6s后输出footer

从加载到显示共消耗约13s (2 + 4 + 6 + 1 ~= 13s),符合预期结果

这个示例的源码(可复制至本地直接运行):

);
}

setTimeout(out_header, 2 * 1000);


}).listen(3002);

 

 

上面是将界面的显示顺序固定写死了,下面将展示一个灵活的动态界面:

Node.js实现的BigPipe

Node.js实现的BigPipe

Node.js实现的BigPipe

先输出6个内容容器,然后构建6个客户端请求,当收到请求数据时直接返回给客户端。如果你需要让界面的内容按顺序显示,只需要修改,返回的delay值,比如按索引值的大小进行修改

true);
params.query.id * 3000; console.log(delay);

 

这个示例的完整源码:

);
response.end();
}, delay);
}).listen(2000);
 
上面的示例中并没有像第一个例子一样,显示输出header信息('Transfer-Encoding' : 'chunked'),而浏览器,在response里却看到了,猜测是node.js在输出的时候内部加上去的。
 
Node.js实现的BigPipe
 
相比php,node.js内部实现并没有“缓冲池”的功能,都是直接输出,很简单吧…
 
 
本文参考:

相关文章: