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 ...
随机推荐
- apache 虚拟主机详细配置:http.conf配置详解
apache 虚拟主机详细配置:http.conf配置详解 Apache的配置文件http.conf参数含义详解 Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd. ...
- 【API】获取优酷视频信息接口
序: 自己的网站中需要接入一个视频模块,虚拟主机的空间小所以只能引用第三方的链接.感觉国内优酷好不错,所以查了一下优酷的接口. 0x00: 先去优酷API开放中心申请一个开 ...
- request 、response和session的区别
request: 1.request.getParameter("key")接受的是来自客户登陆端的数据,接受的是post或get方式传送的value. 2.请求的默认字符集是IS ...
- 0014 Java学习笔记-集合-HashMap集合
主要的方法 + 构造方法: * HashMap(); - 默认大小16,负载因子0.75 * HashMap(int initialCapacity); * HashMap(int initialCa ...
- Redis基本配置
# redis 配置文件示例 # 当你需要为某个配置项指定内存大小的时候,必须要带上单位, # 通常的格式就是 1k 5gb 4m 等酱紫: # # 1k => 1000 bytes # 1kb ...
- java对redis的基本操作
一.server端安装 1.下载 https://github.com/MSOpenTech/redis 可看到当前可下载版本:redis2.6
- git pull
今天在服务器上git pull是出现以下错误: error: Your local changes to the following files would be overwritten by mer ...
- 多CPU下基于e1000e驱动的数据包以及网卡中断流程分析.doc
http://wenku.baidu.com/link?url=mMKDH_fKmUXN7L6rANIFHjoHdKCYBLlDrqoYB1daDTEkNFk9Bt9xlJtS_4BKBj6w22WD ...
- svn使用--all-static编译,移植到其它系统上可能使setlocale等GLIBC相关库函数调用失败
svn: Can't convert string from 'UTF-8' to native encoding
- HTTP 请求报文 响应报文
引言 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发 ...