`
templarz
  • 浏览: 5329 次
  • 来自: ...
社区版块
存档分类
最新评论

读NodeJS开发有感

 
阅读更多
    读了byvoid的NodeJS开发后,一时手痒写下此篇文章,byvoid的nodeJS试读章节只是讲了NodeJS的历史由来,现状,没有专门的例子,在这里我写了个简单的'hello world'NodeJS例子,简单介绍NodeJS的特点。

1 NodeJS是什么
引用
       Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.


翻译如下:  
引用
      Node.js 是一个平台,内置了chrome的javaScript运行环境,可以轻易的构建
快速,可伸缩的网络应用平台。Node.js使用了事件驱动,非堵塞的 I/O模块,使得它可以轻量级,高效的和完美的为数据密集型实时的应用程序服务,它可以运行在分布式设备上。


2. 从NodejS官方解释中可以看到Node.js具有以下特点:
1 )以单进程,单线程模式运行。
2)是时间驱动机制.
  Node.js通过颞部单线程高校的维护时间循环队列来实现,没有多线程的资源占用和上下文切换。
3)支持的编程 语言是 JavaScript。
   在helloworld例子可以看到回调函数采用了匿名函数的形式来实现

var hostRequest = http.request(requestOptions,function(response) {
    var responseHTML ='';
    response.on('data', function (chunk) {
        responseHTML = responseHTML + chunk;
    });

    response.on('end',function(){
        console.log(responseHTML);
   });
});


开发环境配置:
     安装node-v0.8.6-x86.msi, 运行后再dos下输入  node –version,如果配置正常会显示正在使用 的Nodejs版本,如下所示:  

第一个nodejs例子: helloworld

   目标:在 控制台输出 helloworld

  步骤:

    1创建一个helloworld.js文件,把以下内容保存到文件中。

console.log("Hello World, wangwu !");
     2. 使用node.js来执行js文件
     node helloworld.js

第二个例子: 一个基于Node.Js的web应用
目标:  客户可以通过浏览器访问web应用,当客户在浏览器输入 http://127.0.0.1:8888时,可以看到一个欢迎页面。

var http = require("http");

http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World,王五");
  response.end();
}).listen(8888);


     当调用 http.createServer(…)时 ,不仅要监听某个端口的服务器,还要确定服务器在接受到一个请求时,应该如何响应请求,响应给客户什么内容?而且这个过程不是同步的,而是异步的。因为请求在任何时刻都可以到达,使用http.createServer()后向创建它的方法传递一个函数,这样无论何时我们的服务器收到一个请求,这个传递进去的函数都会被调用,这样这个传递进去的函数是预先定义好的函数或是匿名函数都不重要了。
    当收到请求时,使用response.writeHead()函数发送一个Http状态为200和HTTP头的内容类型( content-type),使用resonse.write()函数在HTTP主体发送文本”hello world wangwu”,最后调用 response.end()完成响应。
     最后使用listen方法使服务器监听8888端口,用户在浏览器中直接输入
http://127.0.0.1:8888,就可以看到欢迎页面”hello world”了。
     这里使用了回调函数,这个方法在有相应时间发生时调用这个函数来进行回调。
Node.jS 采用了非阻塞模式,当执行http.createServer(…)时,这条语句会被放到一个队列里,主进程接着往后执行后面的代码。比如jquery的异步请求,代码如下所示:

function ajaxConfirmInputPay( callBackFun )
{
	jQuery.ajax({
            //访问WebService使用Post方式请求
	    type : 'post',
            //调用WebService的地址和方法名称组合
	      url : '${ctx}/carInsure_confirmInput_ajax',
            //这里是要传递的参数,格式为 data: "{paraName:paraValue}"
	    data {name:'wangwu',age:'22',gender:'male’ },

            //设置jquery ajax异步调用webservice
            async: true,  
            //WebService 会返回Json类型
             dataType : 'json',
            //调用的回调函数
	     success : function(result){
                 callBackFun(result);
            },
		error : function(data, msg){
			alert("server not responding!");
		}
	});
}

function inputCallBackFun(data)
{
        if( data.flag == 'ok' ){
            //调用自定义业务方法,比如关闭窗口
            closeWindow();
	  }

} 

jQuery(document).ready(function() {
         doOperateBeforeAjax ();	

         ajaxConfirmInputPay(inputCallBackFun);

         /**
          *  当调用 ajaxConfirmInputPay()发生阻塞时,继续执行
          *  doperateAfterAjax() 
          */
          doOperateAfterAjax();

});

          正常情况下,在页面初始化时代码会按照第一句执行完后,执行第二句。执行完第二句后在执行第三句顺序执行,但如果第二句ajaxConfirmInputPay非常耗费资源需要很长时间来操作,整个进程会停在这一句上,等待这句执行完后在执行第三句。
     如果属于这种情况就是阻塞模式,建议使用ajax的异步调用来改善性能,当运行到第二句ajaxConfirmInputPay()发生阻塞时,继续执行 doOperateAfterAjax()方法,而不是等待ajaxConfirmInputPay()完成后在执行doOperateAfterAjax()方法。这就是非阻塞模式。就是增加一个回调函数inputCallBackFun,作为参数传入到doOperateAfterAjax 方法中。
















  • 大小: 3.3 KB
  • 大小: 3.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics