NodeJS VS Tomcat搭建高并发静态文件服务器(3)

从这里可以看出,对于一个不需要执行任何动态代码的静态文件下载,tomcat服务器在默认配置下要比nodeJS在默认配置下高3倍性能。

但是要注意这是使用服务器自己测试服务器自己,所有的流量均走本地回环网卡,也就是说排除了网速对于服务器处理性能的影响,我也是过在局域网内使用另一台linux服务器进行测试,不过由于测试文件是个20m的apk,几乎99.999%的时间都用于网络传输(使用ab能让局域网网速跑满,实测的时候一直保持在11.3MB/s)所以Tomcat和NodeJS的性能差别并不明显。

那么既然nodeJS在文件的并发访问请求方面相对于tomcat并无优势,那么我们为什么还要使用nodeJS来做静态资源服务器呢?

有一个优势是nodeJS提供了方便的url重定向功能,比如我们有好几个文件夹下的静态文件都想通过192.168.1.81:3000/static/xxx.jpg  这样来获取,也就是不加上具体资源文件夹的名字如/css,/js这样,那么通过nodeJS只需几行代码就可以搞定:

app.use('/static', express.static('css')); app.use('/static', express.static('js')); app.use('/static', express.static('imgs'));

这样就轻松的把所有类型的静态文件都影射到了192.168.1.81:3000/static/这个url下

另外,NodeJS在做静态资源文件服务器的时候,还可以监听资源文件夹的文件增删改事件,然后以这些事件做为触发器做一些其他的操作,这个功能使用Tomcat很难完成,例如有人用新增jpg图片文件的事件触发制作了webp压缩图片文件,对于nodeJS只需几行代码就搞定了,我把上面测试的代码稍加改动如下就可以实现监听某个文件夹动作的功能,使用fs模块和chokidar模块分别做测试:

var express = require('express'); var chokidar = require('chokidar');//文件监听,需要使用npm安装新模块 var fs = require('fs');//fs文件监听 var app = express(); app.get('/', function (req, res) { res.send('Hello World!'); }); app.use(express.static('/opt/apache-tomcat-8.0.36/webapps/AndroidOnlinePackage/release')); app.use(express.static('public')); var server = app.listen(3000, function () { var host = server.address().address; var port = server.address().port; console.log('Example app listening at %s:%s', host, port); // 监控文件夹 var watcher = chokidar.watch("public", { persistent: true // 保持监听状态 }); // 监听增加,修改,删除文件的事件 watcher.on('all', (event, path) => { switch (event) { case 'add': console.log('添加文件'+path) case 'change': console.log('改变文件'+path) break; case 'unlink': console.log('删除文件'+path); break; default: break; } }); fs.watch('public', function (event, filename) {//fs的文件监听虽然系统集成该模块,但是使用的时候感觉并不是很准 console.log('event is: ' + event); if (filename) { console.log('filename provided: ' + filename); } else { console.log('filename not provided'); } }); });


其中,如果使用chokidar模块进行监听需要使用npm安装该模块

npm install chokidar

注意在该js文件启动的时候,chokidar会将所有之前存在的文件都认为是‘添加文件’,出发js命令,所以要格外小心。

另外chokidar.watch函数还可以轻松的添加过滤器等设置,用法比fs要简单实用。 

下面关于Node.js的内容你可能也喜欢

在 Ubuntu 14.04/15.04 上安装配置 Node.js v4.0.0 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/692559500d86d2a2af680dc55074bf05.html