NodeJS学习_1
来源:互联网 发布:tl-wn725n linux 编辑:程序博客网 时间:2024/06/08 06:52
NodeJs : 使用Javascript作为开发语言的一种后台语言,更确切的来讲应该是一种语言框架,使用Chrome的V8引擎作为Javascript的解析器,使得javascript的解析性能不再成为瓶颈,整个Nodejs使用异步调用的方式大大的提高了整个系统的性能
为什么异步调用可以提升系统的响应性能,这个也是相对而言的,如果系统是一个计算密集型的系统,那么异步调用并不能显著的提升性能,但是如果系统是一个类似于微博,消息等社交应用的话,则异步调用则显示出其强大的灵活性,系统没必要阻塞在某个较慢的响应部件上,而是直接处理其他的请求,等到该部件执行完操作后,通知我继续后续的操作即可,打个比方要读取一个较大的文件,此时磁盘的IO会比较慢,如果阻塞在此处则整个系统的响应速度就会及其的慢,而如果cpu此时只是发送一个读取磁盘文件的命令,而去处理其他的请求,等到磁盘已经将数据准备好了后,再通知我继续执行后续的操作,则系统的响应不会因此而被阻塞。
其实异步模型在nginx,tomcat等中也已经很成熟了,如nginx中如果在linux平台上开启了epoll则会自动的使用异步io的方式响应请求,其原理也基本上是异曲同工。只是nodejs在语言以及框架层面上提供了此种能力,让异步编程变得更加的灵活。
当然异步模型也有其缺点,个人认为最主要的缺点就是整个系统的代码会散落在系统的各个地方,打乱了代码的架构,从而使得系统变大了之后,系统的代码比较难维护。
下面切入正题:
1. nodejs的安装:
nodejs提供的有windows版和linux版,对于开发的童鞋来说一般在windows上做开发,由于js是脚本语言,本身不会经过编译,因此在windows上开发,调测完成后,在将相关的源代码拷贝到linux机器上上线运行。因此开发只需要安装windows版本的node即可,
在node的官网上下载node的最新版本,当前最新的版本是V4.0,安装包为标准的windows的msi安装包,直接一路next即可。
安装完毕后,一般node会将自己的home目录添加到path环境变量中,只需要运行cmd,即可执行node程序。
2. 第一个小程序:
在安装完node后,打开一个顺手的编辑器,我一般使用notepad++,新建一个文本文件,
输入
var sys = require("util")
sys.puts("Hello world");
保存为test.js 然后在命令行中切换到该文件的目录所在,执行node test.js即可在console上看到helloworld输出。
3. 创建一个服务器如此简单
上面第一个小程序如此的简单,当然nodejs的主要功能在web服务上。
首先创建一个httpserver.js文件
文件内容如下
var sys = require("util") //需要加载util模块
var http = require("http"); //需要加载http模块
http.createServer(function(request, response) {
// response.sendHeader(200, {"Content-Type": "text/html"});
response.writeHeader(200, {"Content-Type": "text/html"});
response.write("Hello World!");
// response.close();
response.end();
}).listen(8080); //创建一个server,该server在8080端口监听客户的请求,同时如果有请求到来了则执行function回调函数
sys.puts("Server running at http://localhost:8080/");
在console中运行node httpserver.js 会开始运行服务器,在本机的8080端口监听客户端的请求,
此时通过浏览器访问http://localhost:8080则会在浏览器中看到Hello Wrold的结果输出。
创建一个server如此的简单
4. 总结:
node可以作为静态资源服务器,响应客户端的静态资源的请求,也可以作为动态请求的服务器返回json字符串或者其他动态页面给客户端浏览器,上面只是node的最简单的应用,而一个应用服务器不可能如此的简陋,如 如何解析客户端传递过来的参数,如何保存客户端的session,如何与数据库进行交互,如何返回动态页面等等,当然在node中也都有较为完成的解决方案,如express框架等可以较好的解决以上问题。。
node还处于发展的初期,但是前途绝对是光明的。。。
- NodeJS学习_1
- XDoclet起步学习_1
- Junit学习笔记_1
- Jive学习_1
- JavaScript 学习_1
- html学习过程_1
- PushButton学习笔记_1
- STM8_interrupt_vector学习_1
- CSS样式学习_1
- Python基础学习_1
- JAVA学习日志_1
- jms 学习实例_1
- Block阶梯学习_1
- JAVA学习_1基础
- PCL 学习笔记_1
- ruby学习_1
- MarkDown 学习笔记_1
- Swift学习笔记_1
- hdu 1113 Word Amalgamation
- LeetCode Bitwise AND of Numbers Range
- ffmpeg使用小结
- 程序员技术练级攻略
- Java编程中“为了性能”需做的26件事
- NodeJS学习_1
- Java网络编程初识----URL和InetAddress
- Objective-C高级编程——KVC(一)
- Java程序员从笨鸟到菜鸟之(七十九)细谈Spring(八)spring+hibernate整合基本详解
- android-帧动画、布局动画
- 黑马程序员--Java基础
- Java程序员从笨鸟到菜鸟之(七十八)细谈Spring(七)spring之JDBC访问数据库及配置详解
- 鸟哥的Linux私房菜-学习笔记-概论
- Java程序员从笨鸟到菜鸟之(八十)细谈Spring(九)spring+hibernate声明式事务管理详解