之前一直听说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. 抛弃NVelocity,来玩玩Razor

    对于内容型,不易变动的东西我们都希望给它来个静态化,还有种情况就是比如新浪云不支持.net,为了能跑起我们的网站, 只能放些静态页面上面,外加jsonp来实现交互,我们知道.net中有很多模板引擎,但 ...

  2. RabbitMq 技术文档

    RabbitMq 技术文档 目录 1 AMQP简介 2 AMQP的实现 3 RabbitMQ简介 3.1 概念说明 3.2 消息队列的使用过程 3.3 RabbitMQ的特性 4 RabbitMQ使用 ...

  3. MemSQL分布式架构介绍(一)

    最近在了解MemSQL架构,看了些官方文档,在这里做个记录,原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/ ...

  4. 006.udp转发包并代理访问服务器总结

    背景: 当加速器(client)拦截了游戏客户端发送的完整数据包(package)时,将package传给中间服务器(mid_server),经过自己的链路传输数据之后,中间服务器模拟游戏客户端将数据 ...

  5. linux mount 硬盘挂载和卸载

    Linux 挂载 [root@whp6 ~]# mount /dev/sdb5 /mnt/ [root@whp6 ~]# df -h Filesystem Size Used Avail Use% M ...

  6. Jquery 的遍历,祖先、后代、同胞以及其过滤

    什么是遍历? jQuery 遍历,意为“移动”,用于根据其相对于其他元素的关系来“查找”(或选取)HTML 元素.以某项选择开始,并沿着这个选择移动,直到抵达您期望的元素为止. 下图展示了一个家族树. ...

  7. Java内存模型与垃圾回收

    1.Java内存模型 Java虚拟机在执行程序时把它管理的内存分为若干数据区域,这些数据区域分布情况如下图所示: 程序计数器:一块较小内存区域,指向当前所执行的字节码.如果线程正在执行一个Java方法 ...

  8. Android的4种文件类型Java,class,dex,apk

    Java文件-----应用程序源文件 Android本身相当一部分都是用java编写而成(基本上架构图里头蓝色的部份都是用Java开发的),android的应用必须使用java来开发 Class文件- ...

  9. offsetLeft和style.left的区别

    offsetLeft 获取的是相对于父对象的左边距 left 获取或设置相对于 具有定位属性(position定义为relative)的父对象 的左边距 如果父div的position定义为relat ...

  10. .Net Core 控制台输出中文乱码

    Net Core 控制台输出中文乱码的解决方法: public static void Main(string[] args)         {             Console.Output ...