这几天学习nodejs,边学边做点笔记。今天有点累,就捡要点说了,
nodejs是什么
很多人最初接触的是jsp,php,.net这些服务器语言,对于JavaScript的印象最深应该是做为前端渲染的脚本语言运行在客户端的,其实JavaScript还可以运行在服务端,在早些年,Ryan Dahl开发了一个node平台这个平台就是做为JavaScript的运行环境的,为什么选择JavaScript,还为此开发了node平台,因为据统计JavaScript语言是使用者最多的语言,也就是很多人多少都会点JavaScript,这里多费了点口水,现在着重介绍nodejs特性
nodejs特性,单线程,非阻塞I/O,事件驱动
单线程:node就是不同于java,php,.net可以启动多个线程,nodejs是单线程,为什么是单线程,是为了提高服务器性能,因为多开一个线程就会多占用一个cpu资源,单线程减少了内存开销,操作系统的内存换页
非阻塞I/O:单线程在执行时不会因为I/O阻塞就等待I/O执行结束而是响应其他排队的事件等I/O执行结束,再把I/O返回的结果继续执行,也就是这个线程是一直在工作的
事件驱动:不管是新用户的请求,还是老用户的I/O完成,都将以事件方式加入事件环,等待调度
这个三个特性是统一的缺一不可
node没有web容器
node无法直接渲染静态页面,提供静态服务,node也没有根目录的概念,这就是node有别于Apache的地方,当你开启Apache服务,就可以在浏览器下访问根目录的HTML文件并在浏览器渲染出来,而在node不行,他必须通过路由程序指定文件才能渲染,当然这也造就node路由灵活安全的特点,你根据浏览器url在服务器的根据这个url可能就找不到这个文件了。
nodejs并不能挑战jsp,php老牌后台语言
尽管node有很多优势,但在很多大型网站,node都是做为一个小工具开发一些I/O操作频繁的模块,而不能支撑起全站的开发
nodejs适合的开发
善于I/O,不善于计算。因为Node.js最擅长的就是任务调度,如果你的业务有很多的CPU计算,实际上也相当于这个计算阻塞了这个单线程,就不适合Node开发。
当应用程序需要处理大量并发的I/O,而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候,Node.js非常适合。Node.js也非常适合与web socket配合,开发长连接的实时交互应用程序。
比如:
● 用户表单收集
● 考试系统
● 聊天室
● 图文直播
● 提供JSON的API(为前台Angular使用)
目前有用到的比如,知乎的站内信(表单收集),百度的登录(表单收集),12306(全站都是nodejs开发,因为比较多的I/O操作),功夫熊猫,全站也是nodejs开发的