Node能做什么和它的优势
发布于 11 年前 作者 lzxue 6948 次浏览 最后一次编辑是 8 年前

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 回复

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

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

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

可以用多进程来填…pomelo 就是这样设计的…

@youxiachai 如果我没有搞错的话,多进程是针对场景划分的,多进程对于我说的这种情况毫无意义。

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

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

我看到沒有標記代碼的帖都自動略過XD

@xieccy 你还是没有明白我的意思,最好是影响个别人,崩溃会影响所有人

回到顶部