Nodejs的理解

Nodejs是什么?它是js的运行环境(和java上的jre有点像),可以让js脱离浏览器运行。

以下是在知乎上看到一篇文章对nodejs的理解比较好,就转载了。

在传统的Web服务器(Apache)中,浏览器对服务器的每个请求都点击打开链接会让服务器建一个新的进程来处理请求。传统服务器每次有新用户连到你的网站上,你的服务器就得开连接,每个连接都占进程,大部分时间进程都闲着(等着新鲜事物的发生),如果连接数量太多,服务器会耗光内存瘫痪掉。

然后有了Ajax,这样不用每次都请求完整页面了,只请求需要的部分信息(比如刷新朋友圈),这个需要用户和服务器保持长轮询(long polling)。

http请求不是连续的连接,你请求一次,服务器就响应一次。只要页面载入了,不管需不需要服务器响应信息,你都会发Ajax给服务器,服务器也不会立即给你响应,当有新鲜事物发生时在给你响应,然后收到响应后你立即又发Ajax给服务器,这样你的浏览器始终在等待响应。

这种情况怎么解决?解决方法就是刚才上边说的:非阻塞事件驱动。这些概念在我们谈的这个情景里面其实没那么难理解。你把非阻塞的服务器想象成一个loop循环,这个loop会一直跑下去。一个新请求来了,这个loop就接了这个请求,把这个请求传给其他的进程(比如传给一个搞数据库查询的进程),然后响应一个回调(callback)。完事了这loop就接着跑,接其他的请求。这样下来。服务器就不会像之前那样傻等着数据库返回结果了。


如果数据库把结果返回来了,loop就把结果传回用户的浏览器,接着继续跑。在这种方式下,你的服务器的进程就不会闲着等着。从而在理论上说,同一时刻的数据库查询数量,以及用户的请求数量就没有限制了。服务器只在用户那边有事件发生的时候才响应,这就是事件驱动。


FriendFeed是用基于Python的非阻塞框架Tornado 来实现上面说的新鲜事功能的。不过,Node.js就比前者更妙了。Node.js的应用是通过javascript开发的,然后直接在Google的变态V8引擎上跑。用了Node.js,你就不用担心用户端的请求会在服务器里跑了一段能够造成阻塞的代码了。因为javascript本身就是事件驱动的脚本语言。你回想一下,在给前端写javascript的时候,更多时候你都是在搞事件处理和回调函数。javascript本身就是给事件处理量身定制的语言。


Node.js还是处于初期阶段。如果你想开发一个基于Node.js的应用,你应该会需要写一些很底层代码。但是下一代浏览器很快就要采用WebSocket技术了,从而长轮询也会消失。在Web开发里,Node.js这种类型的技术只会变得越来越重要。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值