asp.net程序员初涉node.js
之前一直听说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

总结
asp.net程序员初涉node.js的更多相关文章
- 【ASP.NET程序员福利】打造一款人见人爱的ORM(二)
上一篇我已经给大家介绍AntORM的框架[ASP.NET程序员福利]打造一款人见人爱的ORM(一),今天就来着重介绍一下如何使用这套框架 1>AntORM 所有成员 如果你只想操作一种数据库,可 ...
- 优秀ASP.NET程序员修炼之路
初级的程序员或经验不足的程序员往往只意识到自己的程序是写给计算机的,而不会在意程序其实也是写给人的,或在意得不够.不全面. 写给机器的程序,往往追求的是运行正确.执行效率能满足要求.但程序员的任务仅仅 ...
- 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 ...
- 性能追击:万字长文30+图揭秘8大主流服务器程序线程模型 | Node.js,Apache,Nginx,Netty,Redis,Tomcat,MySQL,Zuul
本文为<高性能网络编程游记>的第六篇"性能追击:万字长文30+图揭秘8大主流服务器程序线程模型". 最近拍的照片比较少,不知道配什么图好,于是自己画了一个,凑合着用,让 ...
- 初涉Node.js
Node.js的是建立在Chrome的JavaScript的运行时,可方便地构建快速,可扩展的网络应用程序的平台. Node.js使用事件驱动.非阻塞I/ O模型,是轻量级.高效.完美的跨分布式设备运 ...
- 程序员使用Node的十个技巧
从问世到现在将近20年,JavaScript一直缺乏其它有吸引力的编程语言,比如Python和Ruby,的很多优点:命令行界面,REPL,包管理器,以及组织良好的开源社区.感谢Node.js和npm, ...
- 【ASP.NET程序员福利】打造一款人见人爱的ORM(一)
“很多人都不太认可以第三方ORM,因为考虑的点不够全面,没有大用户群体的ORM有保证,这点是不可否认确是事实.但是往往用户群体大的ORM又有不足之处,今天我们就来聊聊关于ORM的话题,打造 ...
- 初涉node.js做微信测试公众号一路填坑顺便发现个有趣的其他漏洞
[微信测试公众号] 半年前耍着玩搭起来的“微信简历”,是LAMP版的,很皮毛. 微信的官方文档在这 http://mp.weixin.qq.com/wiki/index.php 1.获取access ...
- 对ASP.NET程序员非常有用的85个工具
介绍 这篇文章列出了针对 ASP.NET 开发人员的有用工具. 工具 1. Visual Studio Visual Studio Productivity Power tool:Visual Stu ...
随机推荐
- MySQL创建索引语法
1.介绍: 所有mysql索引列类型都可以被索引,对来相关类使用索引可以提高select查询性能,根据mysql索引数,可以是最大索引与最小索引,每种存储引擎对每个表的至少支持16的索引.总索引长度为 ...
- Python基础-day2
1.Python模块python 中导入模块使用import语法格式:import module_name示例1: 导入os模块system('dir')列出当前目录下的所有文件 # _*_ codi ...
- netfilter-在内核态操作网络数据包
一.概述 netfilter是自2.4内核的一个数据包过滤框架.可以过滤数据包,网络地址和端口转换 ...
- java报表工具FineReport的JS编辑框和URL地址栏语法简介
JS编辑框: 1.FineReport的js. 作为一款BS产品,browser端的JavaScript是必不可少的. FineReport中的js是已经调用了finereport.js的. 大家知道 ...
- 安装rpm包
下载好一个rpm包怎样安装? [root@localhost ~]# ls anaconda-ks.cfg install.log install.log.syslog jboss-as-7.1.1- ...
- linux tar命令简介
一.使用介绍 1.名词区分 打包:将一大堆文件或目录变成一个总的文件[tar命令] 压缩:将一个大的文件通过一些压缩算法变成一个小文件[gzip,bzip2等] Linux中很多压缩程序只能针对一个文 ...
- Android工程师入门(二)——不忙不累怎么睡。。
安卓开发迫在眉睫,这周入个门吧! Android工程师入门(二) 四.在界面中显示图片 ImageView 是显示图片的一个控件. --属性 src——内容图片: background——背景图片/背 ...
- #include <NOIP2010 Junior> 三国游戏 ——using namespace wxl;
题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之 ...
- 微信支付 总提示get_brand_wcpay_request:fail 也不跳转支付页面 的解决方案
最近在做微信支付,帮客户部署好环境后,测试微信支付,发现点击支付后老是提示: get_brand_wcpay_request:fail, 于是找到代码中调用微信支付的代码段: WeixinJSBrid ...
- 在ubuntu14.04上安装编译Android需要的开发包
具体的操作步骤,可在Android官网查看. http://source.android.com/source/initializing.html 首先安装dpkg-dev sudo apt-get ...