理解Node.js的事件循环(Event Loop)和线程池 Node的“事件循环”(Event Loop)是它能够处理大并发、高吞吐量的核心。这是最神奇的地方,据此Node.js基本上可以理解成“单线程”,同时还允许在后台处理任意的操作。这篇文章将阐明事件循环是如何工作的,你也可以感受到它的神奇。
理解事件循环,首先要理解事件驱动编程(Event Driven Programming)。它出现在1960年。如今,事件驱动编程在UI编程中大量使用。JavaScript的一个主要用途是与DOM交互,所以使用基于事件的API是很自然的。
在nodejs中使用Redis缓存和查询数据及Session持久化(Express) 使用数据库来集中管理session,存放Session内容,并在各个子域名跨域共享Cookies
(SessionID),即可实现为每一个子域分配一个独立的node.js
Web服务器,各个服务程序均可依据sessionid从数据库中寻找到同一Session,从而实现不同Web
Server中的会话同步,从而实现一定程度上的负载均衡。
要想实现完全意义的负载均衡还需要将Web服务做到完全状态无关,不仅仅是Session,所有的中间缓存数据都要转移到与服务器无关的缓存层中,这正是Redis最善长的地方。
在ExpressJS(NodeJS)中设置二级域名跨域共享Cookie 注* 使用数据库mongostore来集中管理session,并在各个子域名跨域共享Cookies/SessionID, 即可实现为每一个子域分配一个独立的node.js Web服务器,可以实现一定程度上的负载均衡。
解决方案: 这样设置即可。
app.use(express.session({
secret: conf.secret,
cookie: { domain:'.yourdomain.com'},
store: new MongoStore(conf.sessiondb)
}));
使用NodeJS将XML解析成JSON及性能比较 并不是所有的API都是以JSON格式返回的。我们有时侯不得不处理一些XML。幸运的是有一个NodeJS模块
xml2js 可以帮你做这件事。
有人指出xml2js的速度过慢,有人做过性能测试,
htmlparser2 的性能可以提升大约5倍以上。
[译]Node.js 框架比较: Express vs. Koa vs. Hapi Express.js无疑是当前Node.js中最流行的Web应用程序框架。它几乎成为了大多数Node.js web应用程序的基本的依赖,甚至一些例如Sails.js这样的流行的框架也是基于Express.js。然而你还有一些其他框架的选择,可以给你带来“sinatra”一样的感觉(译注:sinatra是一个简单的Ruby的Web框架,可以参考这篇博文)。另外两个最流行的框架分别是Koa和Hapi。
NodeJS连接Redis:在(Raspberry Pi)树莓派上安装Redis并设置开机自动启动服务 Redis是一个超精简的基于内存的键值对数据库(key-value),官方只提供Linux版本,Windows版本(64位)由微软非官方提供,其编译后仅有1MB左右。实现非常精简,比如并没有传统数据库中库、表的概念,你并不能设置数据库/表的名字,仅能通过序号选择存放到第几个数据库,使用<schema:hash>的键值来表示存放到什么表里(如user:001)。不过因为其基于内存且实现简单,Redis有着非常好的性能。
避免Node.js中的命令行注入安全漏洞 我们经常使用的调用命令的方法是最简单的child_process.exec。它有很一个简单的使用模式;通过传入一段字符串命令,并把一个错误或命令处理结果回传至回调函数中。这里是你通过child_process.exec调用系统命令一个非常典型的例子。
child_process.exec('ls', function (err, data) {
console.log(data);
});
提高NodeJS网站的安全性:Web服务器防黑客攻击技巧 毫无疑问,Node.js现在是越来越成熟。尽管这样,我们还没有形成很多的安全准则。
在这篇文章中,我会分享一些关于提高Node.js安全性方面的技巧。
Node.JS编码规范指南教程:教你优雅地写JavaScript代码 这是用于书写一致性和优美的node.js代码的指南教程。它由社区维护并在社区内流行,参考了一些人的意见。
我们维护了一个.jshintrc来强制执行这些规则(自动格式化参数配制)。您可以使用并进行调整,或者编写自己的脚本。
Debug调试Node.JS:我们是如何定位内存泄漏和无限循环的 在Storify,我们用Node.js驱动后台。对于大多数生产环境上的问题(像未捕获的异常),我们使用日志来调试。然后我们看到了一些其他的BUG,像内存泄漏和无限循环,这些漏洞无法通过debugging工具来调试。
过去,当我们的服务变得很慢时,我们使用Monit 去重启他们。当我们上线了Livefyre之后,我们决定不要重启,尝试去修复这些缺陷。经过几个月的尝试,我们在Node.JS的调试技巧方面学到了很多。