设为首页 收藏本站
云服务器等爆品抢先购,低至4.2元/月
查看: 791|回复: 0

[经验分享] 读NodeJS开发有感

[复制链接]

尚未签到

发表于 2017-2-21 10:01:04 | 显示全部楼层 |阅读模式
读了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 方法中。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-345110-1-1.html 上篇帖子: NodeJs初学者经典入门解析 下篇帖子: nodejs之旅,启程篇
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表