美文网首页我爱编程
node.js得奇妙之处

node.js得奇妙之处

作者: 君满楼001 | 来源:发表于2017-11-23 08:18 被阅读23次

浏览器给网站发请求的过程一直没怎么变过。当浏览器给网站发了请求。服务器收到了请求,然后开始搜寻被请求的资源。如果有需要,服务器还会查询一下数据库,最后把响应结果传回浏览器。不过,在传统的web服务器中(比如Apache),每一个请求都会让服务器创建一个新的进程来处理这个请求。

后来有了Ajax。有了Ajax,我们就不用每次都请求一个完整的新页面了,取而代之的是,每次只请求需要的部分页面信息就可以了。这显然是一个进步。但是比如你要建一个FriendFeed这样的社交网站(类似人人网那样的刷朋友新鲜事的网站),你的好友会随时的推送新的状态,然后你的新鲜事会实时自动刷新。要达成这个需求,我们需要让用户一直与服务器保持一个有效连接。目前最简单的实现方法,就是让用户和服务器之间保持长轮询(long polling)。

HTTP请求不是持续的连接,你请求一次,服务器响应一次,然后就完了。长轮训是一种利用HTTP模拟持续连接的技巧。具体来说,只要页面载入了,不管你需不需要服务器给你响应信息,你都会给服务器发一个Ajax请求。这个请求不同于一般的Ajax请求,服务器不会直接给你返回信息,而是它要等着,直到服务器觉得该给你发信息了,它才会响应。比如,你的好友发了一条新鲜事,服务器就会把这个新鲜事当做响应发给你的浏览器,然后你的浏览器就刷新页面了。浏览器收到响应刷新完之后,再发送一条新的请求给服务器,这个请求依然不会立即被响应。于是就开始重复以上步骤。利用这个方法,可以让浏览器始终保持等待响应的状态。虽然以上过程依然只有非持续的Http参与,但是我们模拟出了一个看似持续的连接状态

我们再看传统的服务器(比如Apache)。每次一个新用户连到你的网站上,你的服务器就得开一个连接。每个连接都需要占一个进程,这些进程大部分时间都是闲着的(比如等着你好友发新鲜事,等好友发完才给用户响应信息。或者等着数据库返回查询结果什么的)。虽然这些进程闲着,但是照样占用内存。这意味着,如果用户连接数的增长到一定规模,你服务器没准就要耗光内存直接瘫了。

这种情况怎么解决?解决方法就是刚才上边说的:非阻塞和事件驱动。这些概念在我们谈的这个情景里面其实没那么难理解。你把非阻塞的服务器想象成一个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这种类型的技术只会变得越来越重要。

相关文章

  • node.js得奇妙之处

    浏览器给网站发请求的过程一直没怎么变过。当浏览器给网站发了请求。服务器收到了请求,然后开始搜寻被请求的资源。如果有...

  • 奇妙之处

    七年,我流荡已止息不再感人生空,我今生的忧虑也不能再缠累,往日事都已过,永不再恋旧途,那有福的盼望,吸引我奔义路。...

  • Node.js入门

    Node.js与php不同之处: Node.js组成 创建Node.js应用步骤: 步骤1:创建服务器 NPM使用...

  • 人类的奇妙之处

    最近给孩子报兴趣班,发现每到一个报名的地方,总能发现一些熟悉的面孔,细问之下,对方报的几个兴趣班竟和我家几...

  • 文字的奇妙之处

    1.文字可保留回忆,记录生活 将一段旅程变成一串串文字,让它永保那份美丽,若当一天拾起时,也别是一番滋味。 今日重...

  • 化妆的奇妙之处

    在现代社会,人们总会带妆出门,将自己收拾的漂漂亮亮,别人看了也是心情舒畅的。 之后就有了照骗热词的诞生。化妆也成了...

  • 投资的奇妙之处

    投资是一件很有意思的事情。它并不是越聪明越有能力,就一定能获得更高收益的。 体育运动员,最有天赋最努力的一批,通常...

  • 血缘的奇妙之处

    人的血缘真得很奇妙。 两个人结婚生的小孩子,要么像父亲多点,要么像母亲多点,或者两者兼有。 会投胎的小朋友专捡父母...

  • 大自然奇妙之处

    周末回男友家玩了两天,现在正是竹笋生长的时候,刚长出来的笋嫩的很。 上午男友就提着竹篮带我去找笋。我在城里,只见过...

  • 爱情的奇妙之处

    《银河帝国》把森林中的一片叶子刨析结构的能力运用到极致了,不愧是经典了,1965年获得 雨果奖“史上最佳科幻小说系...

网友评论

    本文标题:node.js得奇妙之处

    本文链接:https://www.haomeiwen.com/subject/jajavxtx.html