OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

现在,你为什么应该学Node.js


分享到


分类 心得体会   关键字 Node.JS   发布 1518409521  1399734009692
注意 转载须保留原文链接,译文链接,作者译者等信息。  

让我们现在来谈谈一项最近得到了理所应当的大肆宣传的技术—Node.js。现在Node.js是硅谷最热门的新技术,微软、VMWare、易趣、雅虎等很多顶尖的技术公司都普遍在使用这项技术,对软件开发技术人员来说这是一项非常完美的技术,能够给他们带来意想不到的就业机会。

你可能听说过Node.js,但是只知道它与实时或者高扩展性的应用程序有关,你也可能听说过Node.js是针对服务器端的JavaScript脚本语言(并且你很想知道为什么所有人需要它!),或者你知道Node.js是什么,但是不确定什么时候或者为什么要去使用它。慢慢来,我将会解释这所有问题。

 

让我从头开始来说。

 

网站是不断变化的

网络曾经是与消费有关的,像浏览网页,观看视频,欣赏猫的图片,当然,现在它仍然与猫的图片有关……但是现在网络与交流有更大的联系。世界各地的用户希望彼此能够交流,并且能实时地交流。聊天、游戏、社交媒介的不断更新、团队协作所有这些特征都要求用户、客户端和服务器端能够通过网络实时交流。而且,实时交流必须是大规模的,能够支持成百、上千甚至数百万的用户。

所以,软件工程师应该做什么来实现这些呢?我们需要客户端和服务器端能实时交流,那意味着我们需要快速的持续稳定的输入/输出。任何有网站开发经验的人都知道HTTP(超文本传送协议)在创建时是没有这个作用的。大量的客户端不断地同时访问一个服务器是非常慢并且效率低下的。为了保证大规模的实时交流,服务器必须能够推送数据给客户端而不是繁重的HTTP请求/响应模式,并且我们必须保证这些轻松推送的交流工作从软件发展立足点上来说在某种程度上是大规模的,可持续的和可使用的。

 

Node.js入门

Node.js 是一个事件驱动,服务器端的JavaScript环境。Node结点用V8引擎运行JavaScript,V8引擎是谷歌公司为他们的谷歌浏览器开发的。借助于V8,Node得以提供一个服务器端的运行环境来快速的编译和执行JavaScript语言。它速度的提升主要是因为V8把JavaScript编译为本地机器代码(直接解释执行),而不是编绎为字节码或中间代码(再解释执行)。Node.js是开源的,跨平台的,能够运行在Mac OSX,Windows和Linux等操作系统上。


(OurJS注* 关于NodeJS性能方面的评测,可参见: PayPal为什么从Java迁移到Node.js, Ngix_Lua, Node.JS Python三者性能相当,均比php快近一倍, 性能测评:Node.JS比Java EE快20%)


但是,JavaScript运行在服务器端?这是为什么呢?虽然JavaScript历来降级在web浏览器中做低贱的工作,它实际上是一个功能完整的编程语言,能够比传统的c++等语言做更多的事。Ruby,或者Java. 此外,JavaScript有出色的事件模式优势,理想的异步编程。JavaScript也是一个无处不在的语言,成千上万的开发者都知道它。这降低了node . js的学习曲线,因为大多数开发者不需要学习新的语言去开发Node.js应用程序。

 

异步编程的简单方法

除了闪电般快速的JavaScript执行,Node.js背后的真正魔力是个叫事件循环的机制。为了能使大规模的客户使用流畅,Node.js中所有的I/O集中操作都是异步的。传统的线程方法来达到异步编程是难以处理的,也为大量的客户端产生不必要的的内存占用(一个客户端产生一个线程,内存占用就相应地增加)。为了避免这种低效率并且我们都知道线程编程的困难,Node.js就包含了一个事件循环机制(Event Loop),为你管理所有的异步操作。当一个Node应用程序需要去完成一个块操作(I/O输入输出操作,大量的计算等等),它就传送一个异步任务给事件循环,伴随着一个回调函数,然后继续执行程序的余下部分。事件循环跟踪着异步操作,当完成时执行异步操作所传送的的回调函数,返回它的结果的给应用程序。这种机制允许你管理大量的操作,比如客户端的连接或者计算,让事件循环高效的管理线程池并且优化任务执行的速度。当然,把这个责任留给事件循环后,Node.js开发者会特别轻松,然后他们可以专注于实现他们的程序功能。



注;这里是图解讲解Node.js的事件循环生命周期

能够简化异步编程的Node.js对开发者来说是强大的工具 。通过使用Node.js,你可以开发复杂的应用程序链接千百万的客户端,因为应用程序处理客户端请求是仿冒密集型的工作要管理输入 / 输出和事件循环计算。      

 

社区驱动                      

除了它固有的能力,Node.js有一个繁荣的开源社区创造了很多出色的模块给Node.js应用程序增加了许多额外的功能,其中最著名的是socket.io,它是一个管理客户端和服务器之间的持久连接的模块,能够启用服务器推送实时更新到客户端。Socket.io抽象了这个技术使开发人员可以不用理会这些连接,它自动使用最好的技术可用于一个特定的客户端(如果浏览器支持的话就使用网络套接字,如果不支持就使用JSONP或者Ajax长连接)。这个神奇的技术让你用很少的代码容易地编写实时应用程序。例如这个高扩展性,实时聊天服务器:


server = require('http').createServer();

server.listen(8080);

var io = require('socket.io').listen(server);

io.sockets.on('connection', function(socket) {

// when message received, send it to all connected clients

socket.on('message', function(message){

console.log("Received message: " + message +

" - from client " + socket.id);

io.sockets.emit('chat', socket.id, message);
});
});

只有短短的十行代码!相应的客户端代码一样简单,稍微想一下这个可能性! 学习Node.js的例子,现在开始编写你未来的可伸缩的、实时的应用程序。这种高水平的课程提供详细的演示,教程和深入的代码练习,让你即刻动手编写Node.js应用程序。

 

关于作者

康斯坦丁亚伦Cois在卡内基梅隆大学领导一个软件工程团队。另外,他是一位兼职教授给研究生教授软件工程课程。亚伦在2007年获得博士学位,为生物医学应用程序开发先进的算法和软件系统。他现在的研究领域是web应用程序,实时应用系统和云计算

博客地址: http://www.codehenge.net

邮箱: cacois@gmail.com

 


原文地址: 点此
社区评论 ( Beta版 )
  • #0 双脚兽 1399772429000
    你敢用多核来比么?
  • #1 一个人惺惺相惜 1399863967000
    @双脚兽

    cluster 和 child_process 是用来确保每一个核运行一个Node进程(worker)的…… 这个跟nginx的原理比较像。
  • #2 redstone 1399873094000
    @一个人惺惺相惜

    cluster都不需要使用,直接用pm2就可以了。
  • #3 小意境 1399961151000
    11111111111111111111111111111
  • #4 ncsb 1400334447000
    似乎没有看到有收藏的功能了
  • #5 xxx 1400673451000
    能够比传统的c++等语言做更多的事 capable of anything that more traditional languages
  • #6 龙双另 1439292314297

    写的挺好

  • #7 侯并式 1457342428929

    引用

  • #8 姬仁劝 1457657269280

    每个客户端产生一个进程,不是线程。

  • #9 宁介北 1460623534210

    想学

OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. 编程是一个没有前途的工作
  2. 你已经毁了JavaScript
  3. 为什么我不建议你将JavaScript作为主力语言
  4. 你用什么工具开发JavaScript?
  5. 将JavaScript 作为第一编程语言
  6. 什么是最优秀的JavaScript框架?Angular or Backbone?
  7. 使用Backbone构建精美应用的7条建议
  8. 抛弃jQuery,深入原生的JavaScript
  9. 干嘛不在企业中使用Node.js呢?
  10. 用JavaScript的5个原因
  11. 用 OnceAir 搭建个人Git/Svn/照片备份服务器,每年电费7块钱

 相关阅读 - 心得体会
  1. 每周工作不要超过40小时
  2. 10位顶级PHP大师的开发原则
  3. 软件开发中最流行的错误观点有哪些?
  4. 14条建议,使你的IT职业生涯更上一层楼
  5. 不能和老板做亲密朋友
  6. 老码农教你学英语
  7. 不要盲目的在项目中使用LESS CSS
  8. 做为技术人员为什么要写博客
  9. 幸福和成功的十条诫律
  10. 在创业型软件公司的收获

 关键字 - Node.JS
  1. 提高NodeJS网站的安全性:Web服务器防黑客攻击技巧
  2. Node.JS用Socket实现FTP Server服务器和Client客户端
  3. [译]Node.js 框架比较: Express vs. Koa vs. Hapi
  4. Express入门教程:一个简单的博客
  5. 是什么让Node.js比Java更快?为什么NodeJS这么快?
  6. 使用Node.JS批量查找替换目录下文本文件中图片地址内容
  7. 判断Node.JS TCP Socket当前连接状态
  8. Node.JS进程间通讯的几种方法:Redis Publish/Subscribe 和 UDP Socket
  9. Node.JS命令行或批处理中更改Linux用户密码
  10. Node.JS用Path将相对路径转为绝对路径

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号