有人使用过nodeJS吗?性能如何?内存管理?
我正在寻找一种技术,可以让我创建一个实时的网络应用程序跟踪系统和聊天。
如果你考虑过并决定不使用它,你用的是什么?
发布于 2010-10-08 01:45:33
内存
Node.js的优势来自于它能够保持大量连接的开放和空闲。例如,Apache需要一个连接限制(有时低至20个并发连接,这取决于您的服务器环境),因为它为每个连接分配2MB内存,而Node.js不需要这个限制。由于这个问题,Apache也不喜欢保持连接打开,因此保持连接打开就成了一件麻烦事。
节点应用程序被编程为单个线程(尽管在后台它使用线程进行各种阻塞操作,但不是基于每个连接)。如果您使用Erlang编程,您可能会知道不必关心其他代理(或连接)正在做什么,同时仍然能够在(虚拟)实例之间共享数据,而不需要任何额外的工作,这是多么解放。
理论上,Node可以处理与系统上允许的最大文件描述符/套接字数量一样多的连接。在windows (使用cygwin)中,这大约是65536,在unix上,我打赌可能会更多,尽管理论上是无限的(服务器端在80端口,每个目的地可以处理65536个连接)。在Apache中,这会在影响到2000个用户之前很久就导致内存分配问题。
实际上,这些只是一些数字,它们还会受到一堆其他因素的影响,比如你的应用程序可以实际处理多少数据传递给给定的连接子集(甚至所有连接)。更现实的估计是,它可以处理20-25.000个平均活动的用户,而不会有任何明显的滞后。我所知道的唯一可以处理这么多并发用户的纯单服务器设置是用C编写的IRC服务器,尽管可能也有一些web服务器(如nginx)可以处理它。
Performance
Node使用谷歌的V8 JavaScript引擎,这意味着它很快,而且每周都会变得更快。
Node的一个优点是它使用异步I/O,所以当一个用户必须等待文件从磁盘读取或数据库调用时,node将其放在后台(记住我说过它在后台使用线程),让我们等待,而在主线程中它转移到下一个任务。这确保了它始终保持移动。即使任何给定的用户可能会有轻微的延迟,其他用户也不会因此而受阻。
socket.io
这是用于通信的库。您可以在http://socket.io上找到更多信息
它还提供了一个聊天示例,非常简单,你会不由自主地觉得它很棒。
哦,记得自己试一下Node,然后在此基础上做出决定。它并不是万能的,但在很多事情上都是一个不错的选择。
发布于 2010-11-14 11:00:53
其他流行且高性能的自定义web应用程序选项: Python、Twisted Erlang、->、Mochiweb、->、Comet
node.js是相当新的,没有像Twisted或Erlang那样的支持库的深度。但是,如果您不需要所有这些库,那么它似乎是一个合理的选择。它的线程行为类似于Python,所以它的伸缩性应该类似于Twisted。但是,如果单个多核节点上的大量用户对您很重要,那么it seems as if Erlang has it beat。
发布于 2010-10-10 23:57:26
在deftserver.org中可视化了使用node.js (也可以使用龙卷风和deft)进行性能基准测试
https://stackoverflow.com/questions/3878096
复制相似问题