之前一直听说node.js在处理网站大规模并发上十分有用,所以有一定规模的公司都在使用node。我在工作中只用过jquery,属于那种边做功能边学习的那一种。甚至连原生的js都不太会写,只是知道语法差不多吧。于是诚惶诚恐的购买了一本《node.js权威指南》,先看再说吧,边看边学习语法和一些api,遇到不懂的就直接百度。从这两天学习的进程来说,对于我这个将近两年工作经验的.net程序员来说还不算困难。

本文章将会总结我这两天的学习心得,并在一些地方,比如语法等地方对比C#,使大家更容易去理解,给想学习node.js的人一点帮助,也可以共同学习。

node.js的优势

  在常规的后台语言搭建的服务器环境里面,客户端每建立一个链接就得去创建一个新线程。一台8G内存服务器可以同时承担的最大连接数也就4000。所以,当用户数量上去的时候,一台服务器的资源就捉襟见肘了。重构又麻烦伤神,而且也不会有多大的改进,只能来堆硬件了,造成成本的增加。

  node.js则修改了客户端到服务器的连接方法,解决了高并发的问题。因为它不去为每个客户端创建一个新的线程,而是为每个客户端连接触发一个在node.js内部进行处理的事件(使我想到了写页面jquery的时候各种事件)。如果使用node.js,可以同时处理多达几万个用户的客户端连接,优势显而易见。

node.js为何能搭建服务器

  node.js使用的语言就是javascript,在我看来这个只是运行在浏览器的脚本语言而已,为什么会用它去做一些后台语言的事情?

  node.js是一个用于开发各种Web服务器的开发工具。在node.js服务器中,运行的是高性能的V8 Javascript脚本语言,这是一个可以运行在服务器端的Javascript脚本语言。该语言是一种被V8 Javascript引擎所解释并执行的脚本语言。V8 Javascript引擎是由Google使用C++开发的一种高性能Javascript引擎,这个引擎不限于在浏览器中运行。node.js将其用在了服务器中,并且为其添加了许多不同功能的API。最重要的是V8 Javascript引擎使用了一种全新的编译技术,使其有非常高的执行效率,可以说跟C比较接近了。

node.js实现高性能所采用的机制

  1.非阻塞型I/O

  众所周知,Javascript是单线程的,V8 Javascript也是如此,所以不用担心其争夺资源而造成死锁现象。但与客户端脚本语言不同的是,node.js中为V8 Javascript提供了非阻塞型I/O机制。在传统的单线程处理机制中,在访问数据库的时候,整个线程都处于等待状态,等待数据返回的结果,才能继续执行后面的代码。也就是说I/O操作阻塞了代码的执行,极大的降低了运行效率。由于node.js采用了非阻塞行型I/O机制,因此在执行了访问数据库的代码之后将立即转而其后面的代码,把数据库返回的结果放在了回调函数中运行。

  2.事件环

  在node.js中,在一个时刻只能执行一个事件的回调函数,但是在执行一个事件回调函数的中途可以转而去处理其他事件。包括触发新的事件、声明该事件的回调函数等。然后返回继续执行原事件的回调函数,这种处理机制成为事件环机制。

node.js的使用背景

  上面已经有涉及,当应用程序需要处理大量并发的输入/输出,而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候,我们就应该考虑使用node.js来进行该应用的开发,比如聊天服务器和服务类网站或电子商务网站。

node.js安装

  我在这儿就阐述windows下的安装,安装就很简单了,直接上官网https://nodejs.org/下载(家里突然就打不开,就没截图了),基数版本是算是beta版本,偶数版本是稳定版本。下载下来就直接双击打开,点击下一步安装就行了。想看是否安装成功或者是版本,打开cmd命令行工具,输入node -v 就可以查看机器下的node.js版本了。如下图:

  

node.js的简单实例程序

  我在D盘下建立了一个文件夹nodejs,然后在里面新建两个js文件,function.js和entrance.js。

  function.js代码如下:

var add=function(a,b){
console.log("a+b=%s",a+b);
} exports.add=add;

  entrance.js代码如下:

var object=require('./function');

object.add(3,4);

  代码很容易理解,在node.js中,文件相当于模块。我的理解是,这一个单独的文件相当于C#里面一个cs文件,一个cs文件里面可以写一个类。然后供其他的类去调用。exports.add=add;的意思是将这个方法暴露给外面,然后entrance.js就可以调用function.js暴露的方法了。这个可以理解,相当于C#里面,public声明的方法,其他没有给exports对象的方法,相当于私有方法。var object=require('./function');相当于C#里面的引用吧。

node.js运行代码

  打开命令行工具,默认在C盘某个路径。因为我的代码放在D盘,所以我得先切换到D盘。输入d: 切换到D盘。

   执行entrance.js

 

总结

  书一天的时间看了50页,还是不难去理解node.js的,只不过Javascript基础薄弱,遇到一些API和基础知识必须得去慢慢学习。这个算是摸索着成长吧。
 
 

asp.net程序员初涉node.js的更多相关文章

  1. 【ASP.NET程序员福利】打造一款人见人爱的ORM(二)

    上一篇我已经给大家介绍AntORM的框架[ASP.NET程序员福利]打造一款人见人爱的ORM(一),今天就来着重介绍一下如何使用这套框架 1>AntORM 所有成员 如果你只想操作一种数据库,可 ...

  2. 优秀ASP.NET程序员修炼之路

    初级的程序员或经验不足的程序员往往只意识到自己的程序是写给计算机的,而不会在意程序其实也是写给人的,或在意得不够.不全面. 写给机器的程序,往往追求的是运行正确.执行效率能满足要求.但程序员的任务仅仅 ...

  3. ASP.NET Web Api vs Node.js Benchmark

    http://mikaelkoskinen.net/post/asp-net-web-api-vs-node-js-benchmark ASP.NET Web Api vs Node.js Bench ...

  4. 性能追击:万字长文30+图揭秘8大主流服务器程序线程模型 | Node.js,Apache,Nginx,Netty,Redis,Tomcat,MySQL,Zuul

    本文为<高性能网络编程游记>的第六篇"性能追击:万字长文30+图揭秘8大主流服务器程序线程模型". 最近拍的照片比较少,不知道配什么图好,于是自己画了一个,凑合着用,让 ...

  5. 初涉Node.js

    Node.js的是建立在Chrome的JavaScript的运行时,可方便地构建快速,可扩展的网络应用程序的平台. Node.js使用事件驱动.非阻塞I/ O模型,是轻量级.高效.完美的跨分布式设备运 ...

  6. 程序员使用Node的十个技巧

    从问世到现在将近20年,JavaScript一直缺乏其它有吸引力的编程语言,比如Python和Ruby,的很多优点:命令行界面,REPL,包管理器,以及组织良好的开源社区.感谢Node.js和npm, ...

  7. 【ASP.NET程序员福利】打造一款人见人爱的ORM(一)

          “很多人都不太认可以第三方ORM,因为考虑的点不够全面,没有大用户群体的ORM有保证,这点是不可否认确是事实.但是往往用户群体大的ORM又有不足之处,今天我们就来聊聊关于ORM的话题,打造 ...

  8. 初涉node.js做微信测试公众号一路填坑顺便发现个有趣的其他漏洞

    [微信测试公众号] 半年前耍着玩搭起来的“微信简历”,是LAMP版的,很皮毛. 微信的官方文档在这 http://mp.weixin.qq.com/wiki/index.php 1.获取access ...

  9. 对ASP.NET程序员非常有用的85个工具

    介绍 这篇文章列出了针对 ASP.NET 开发人员的有用工具. 工具 1. Visual Studio Visual Studio Productivity Power tool:Visual Stu ...

随机推荐

  1. goldengate初始化

    对丢弃已久的goldengate环境重新配置,使其重新开始跑起来 环境是一个主机上的两个库,都是单机,所以也就没配pump进程了,trail file都是在一个文件夹下的,extract写trail ...

  2. 描述Linux系统开机到登陆界面的启动过程(计时2分钟)

    简述: 1.开机BIOS自检 2.MBR引导 3.grub引导菜单 4.加载内核kernel 5.启动init进程 6.读取inittab文件,执行rc.sysinit,rc等脚本 7.启动minge ...

  3. 预定义接口-迭代器Iterator

    <?php /* 可在内部迭代自己的外部迭代器或类的接口. Iterator extends Traversable { abstract public mixed current ( void ...

  4. ELF Format 笔记(一)—— 概述

    ilocker:关注 Android 安全(新手) QQ: 2597294287 ELF Object files 参与程序的链接和执行,从这两个角度分别有两种视图: ELF header 位于文件的 ...

  5. 理解 OpenStack + Ceph (5):OpenStack 与 Ceph 之间的集成 [OpenStack Integration with Ceph]

    理解 OpenStack + Ceph 系列文章: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 (5)Ceph 与 OpenS ...

  6. 使用::before和::after来完成尖角效果

    一.目标 目标完成下图效果: 二.完成 1.分析 在::before和::after伪元素的用法一文中有说到使用::befrore和::after可以完成一个六边形.这个案例是用一个#star-six ...

  7. css3 @font-face

    很长时间,web设计师总是得用一些“web-safe”字体,英文用body{font-family:"corbel", Arial, Sans-serif;  }中文用body{f ...

  8. 【原】ZenCoding中常用的CSS3样式

    用ZenCoding这么久了,总结下常用CSS3的写法,方便以后查找: Property Alias @media print {} @m box-sizing:border-box; bxz:bb ...

  9. NOIP2003传染病控制[按层DFS]

    题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染病,难以准确判别病毒携带 ...

  10. 使用 React.js 的渐进式 Web 应用程序:第 1 部分 - 介绍

      使用 React.js 的渐进式 Web 应用程序:第 1 部分 - 介绍 使用 React.js 的渐进式 Web 应用程序:第 1 部分 - 介绍 来自译者 markzhai:大家也知道最近 ...