CNode

Node能做什么和它的优势

Llzxue发布于13 年前最后回复13 年前8 回复7502 浏览0 收藏

 Node核心思想:  1.非阻塞;  2.单线程;  3.事件驱动。

  在目前的web应用中,客户端和服务器端之间有些交互可以认为是基于事件的,那么AJAX就是页面及时响应的关键。每次发送一个请求时(不管请求的数据多么小),都会在网络里走一个来回。服务器必须针对这个请求作出响应,通常是开辟一个新的进程。那么越多用户访问这个页面,所发起的请求个数就会越来越多,就会出现内存溢出、逻辑交错带来的冲突、网络瘫痪、系统崩溃这些问题。

  Node的目标是提供一种构建可伸缩的网络应用的方案,在hello world例子中,服务器可以同时处理很多客户端连接。

  Node和操作系统有一种约定,如果创建了新的链接,操作系统就将通知Node,然后进入休眠。如果有人创建了新的链接,那么它(Node)执行一个回调,每一个链接只占用了非常小的(内存)堆栈开销。   

  举一个简单的异步调用的例子,把test.js和myMydule.js准备好了,^_^。把以下代码拷贝到test.js中并执行:   var fs = require('fs');   fs.readFile('./myModule.js', function (err, data) {     if (err) throw err;     console.log('successfully');   });   console.log('async');       所谓的异步,大家应该都能想得到运行时会先打先显示"async",再显示"successfully"。

  Node是无阻塞的,新请求到达服务器时,不需要为这个请求单独作什么事情。Node仅仅是在那里等待请求的发生,有请求就处理请求。

  Node更擅长处理体积小的请求以及基于事件的I/O。

  Node不仅仅是做一个Web服务的框架,它可以做更多,比如它可以做Socket服务,可以做比方说基于文件的,然后基于像一些比方说可以有子进程,然后内部的,它是一个很完整的事件机制,包括一些异步非注射的解决方案,而不仅仅局限在网络一层。同时它可能,即使作为一个Web服务来说,它也提供了更多可以深入这个服务内核、核心的一些功能,比方说Node使用的Http Agent,这块就是它可以更深入这个服务内核来去做一些功能。

查看回复

回复 (8)

X
xieccy#3·13 年前
引用 dengqiaonode的劣势也是单线程模型,如果程序有什么bug导致非正常退出就不好了,如果是web应用还可以通过cluster模块来缓解,要游戏应用里面,用户会掉线,也是一把双刃剑啊

@dengqiao 这跟node.js没关系, 你用java或C去写, 如果场景服务器挂了, 一样要把进程重启。 如果前端的连接服务器挂了, 一样也要重连。

pomelo 0.5版在高可用上做了些工作, 很多有状态服务(如master,组队管理器等)在挂了后仍然可以通过备份进程保证应用运行。

D
dengqiao#5·13 年前

还应该强调一下单线程模型对游戏开发的好处,不需要操心锁和线程安全的问题,对于一个多人在线的游戏来说锁还是很头疼的问题。

D
dengqiao#6·13 年前

node的劣势也是单线程模型,如果程序有什么bug导致非正常退出就不好了,如果是web应用还可以通过cluster模块来缓解,要游戏应用里面,用户会掉线,也是一把双刃剑啊

J
jiyinyiyong#7·13 年前

关于 Markdown 的标记, 我再罗嗦下 请标记下代码, 不标记的代码太难阅读了

参与回复
登录后即可参与回复。登录