首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js事件与服务器端线程编程

Node.js事件与服务器端线程编程
EN

Stack Overflow用户
提问于 2011-01-02 21:07:16
回答 3查看 1.3K关注 0票数 4

我们正计划开始一个相当复杂的门户网站,预计将吸引良好的本地流量,我的老板告诉我考虑/分析服务端的node.js。我认为可伸缩性和多核支持可以通过Nginx或Cherokee来处理。

1)这个node.js准备好做一些严肃的/大的业务了吗?

2)服务器端的这种“事件/异步”范例是否有可能支持大流量和数据操作?考虑到“一切”都是在一个线程中处理的,如果它崩溃了,所有的活动连接都会丢失(尽管它很容易重启)。

3)与基于线程的编程方式相比,基于事件的编程有什么优势?反之亦然。(我知道与线程切换相关的成本较高,但硬件可以通过事件模型来压缩。)

以下是有趣但(在某种程度上)相互矛盾的论文:

1) http://www.usenix.org/events/hotos03/tech/full_papers/vonbehren/vonbehren_html

2) http://pdos.csail.mit.edu/~rtm/papers/dabek:event.pdf

EN

回答 3

Stack Overflow用户

发布于 2011-01-03 23:56:21

  1. Node.js正在以极快的速度发展,它的大部分功能都很坚固,可以投入商业使用。然而,
  2. 有很多不足之处,比如数据库驱动程序、jquery和DOM、多个http头等等。有很多模块可以解决各个方面的问题,但对于生产环境,您必须小心选择稳定的模块。从操作系统的角度来看,使用单个线程实际上比使用1000个(甚至50个)线程和基准测试要高效得多(对不起,不要手头有它们--稍后我会尝试找到它们并链接它们)表明它能够支持大流量-尽管不确定文件系统访问。
  3. 基于事件的编程是:

代码语言:javascript
复制
1. Cleaner-looking code than threaded code (in JavaScript, that is)
2. The JavaScript engine is extremely efficient with processing events and handling callbacks, and its easily one of the languages seeing the most runtime optimization right now.
3. Harder to fit when you are thinking in terms of control flow.  With events, you can never be sure of the flow. However, you can also come to think of it as more dynamic programming. You can treat each event being fired as independent.
4. It forces you to be more security-conscious when programming, for the above reason. In that sense, its better than linear systems, where sometimes you take sanitized input for granted.

至于这两篇论文,都是比较老的。第一个基准测试,如你所见,有一个关于这些研究的更新的注释:

http://www.eecs.harvard.edu/~mdw/proj/seda/

它还引用了您链接的第二篇关于他们所做的工作的论文,但拒绝评论它与基于事件的系统和基于线程的系统之间的比较的相关性:)

票数 4
EN

Stack Overflow用户

发布于 2011-02-15 19:02:18

Try yourself发现真相

票数 0
EN

Stack Overflow用户

发布于 2012-10-06 12:55:33

请参阅What is Node.js?,我们将在其中准确介绍这些内容:

Node在生产中绝对是可能的,但离文档中似乎承诺的“交钥匙”部署还很远。在Nodev0.6.x中,“集群”已经集成到平台中,提供了基本的构建块之一,但我的"production.js“脚本仍然需要大约150行逻辑来处理诸如创建日志目录、回收死的工作进程等工作。公平地说,Rails确实存在这个问题。它是通过两个互补的机制解决的: 1)将Rails/Node放在一个专用的via服务器(用C编写并经过多次测试)后面,比如Nginx (或Apache / Lighttd)。sub服务器可以高效地提供静态内容、访问日志记录、重写URL、终止SSL、执行访问规则以及管理多个子服务。对于命中实际节点服务的请求,hit服务器通过代理发送请求。2)使用像"Unicorn“这样的框架来管理工作进程,定期回收它们,等等。我还没有找到一个看起来完全成熟的节点服务框架;它可能存在,但我还没有找到它,在我手写的"production.js”中仍然使用了大约150行代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4578484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档