不用框架node 怎样把页面推送到 客户端?
发布于 11 年前 作者 zhouyongshishui 6104 次预览 最后一次回复是 11 年前 来自
var http = require(‘http’), fs = require(‘fs’);
http.createServer(function (req, res) { //fs貌似没有推送文件的这个方法。。。 //fs.sendFile(’./index.html’); }).listen(4000);
15 回复
var http = require(‘http’), fs = require(‘fs’);
http.createServer(function (req, res) { //fs貌似没有推送文件的这个方法。。。 //fs.sendFile(’./index.html’); }).listen(4000);
var data = fs.readFileSync(‘your.html’); res.end(data);
哥们儿,你让他用同步方法,你不是存心害别人么?
@hainee 这里同步、异步都一样
@cloudcome What?怎么会一样呢?
@hainee @anti-peng @cloudcome 依我看,这里同步比异步好啊。
fs.createReadStream(‘your_static_file’).pipe(res);
@alsotang 这里同步为什么比异步好呢?Why?求赐教! 我觉得GuoZhang这样:fs.createReadStream(‘your_static_file’).pipe(res);比较好啊 难道pipe是同步的?
不一样,
readFileSynce整个文件读完后再 responecreateReadStream('file').pipe(res)这是chunk,读多少respone多少。弄个大文件,打开浏览器就一目了然了。
NODEJS主线程是单线程的,之所以支持高并发, 就是使用了异步+回调的方式, 如果你这里使用同步处理文件,那在并发访问的时候,那其它线程可能都会阻塞在主线程。
如果在你的NODE.js主线程中业务逻辑很复杂的时候,那整个网站都会被阻塞在主线程,之所以NODEJS,单线程异步无阻塞,那是因为系统提供了异步+回调的接口,把这些处理交给了底层系统去执行才没有被阻塞, 如果在上面你使用同步可能就会导致被阻塞
个人爱好我也在自学node.js , 这是我对上面的理解,如果理解有错请多指教, 谢谢!
还是得异步 nodejs就是一个单线程任务调度器 如果同步 会造成调度器本身阻塞 这样其他请求就需要等待了吧
要客户端配合,网页上的推送也要看写网页js的人用的方法了,客户端的推送方法案就更多了,直接用socket也可以,了解原理和本质就可以想怎么做就怎么做,能做到最好。
@hainee 我的理解是:本地硬盘读写,异步没有优势,徒增了代码的复杂度。
@hainee
@alsotang 那不一定啊,如果使用同步,在读取这个文件的时候,磁盘IO忙,没有及时相应,那么整个系统都会被这个读取给阻塞,导致网站服务暂停响应的!
@cloudcome 我靠,哥们,我以为我们上面说的是同一件事呢。
1 这里是会阻塞主线程的啊
2 不是大文件所以可以忽略这点我赞同
3 缓存赞同