一、node.js定义
编写高性能网络服务器的JavaScript工具包(用js开发服务器端程序)
单线程、异步、事件驱动
特点:快、耗内存多
异步消耗内存测试:
网上一个百万级并发测试,未优化的情况下1M的连接消耗了16G的内存。
1、对比PHP的运行机制
PHP本身不支持多线程,但是它本身的服务器,例如Apache ,它是支持多线程的。那么当Apache初始化的时候,他会启动150个线程提供给PHP,那么如果在一定时间的内,有大量的并发(瞬间会有大批的访问者去访问这个服务器)产生的时候。假设访问者有1万人,它会到线程池里取线程,总共有150个线程,就分配给150个人。线程的操作等线程完毕返回给客户结果后,线程会放回到线程池。当放回线程池以后,这个线程又会被提供给其他人用。这个就是PHP的运行方式。
2、node.js的运行机制
它只有一个单线程,那么1万个人访问的话,拿一排号1,2,3,4,5·····10000,如果一个个访问,它的效率会很低,那么这个时候怎么办呢?
它会采用一个异步,也就是当我访问第一个,他会另开一个空间,对库操作;第二个线程例如读取操作的时候,,它是会另开一个空间,以此类推。就像是在医院的分诊台一样,护士不负责给你看病,只负责给你分配到那个科室看病。
这种操作它的特点:快,例如百万级的并发量的时候可以瞬间的过去了
占内存大,分配到别的内存里取运行。
幸好:内存是可以不断添加的,而且费用降低了,这种方式用的比较多。因为用钱来解决的问题都不是问题!!
3、node.js VS PHP
优点:
性能高(机制问题)
开发效率高,(省不少优化的事)
应用范围广(可以开发桌面系统,electron框架)
缺点:
新、人少
中间件少
IDE不完善
4、node.js的劣势和解决方案
①、默认不支持多核,但用cluster可以解决
②、默认不支持服务器集群,node-http-proxy 可以解决
③、使用NGINX 做负载均衡,静态的有NGINX处理,动态的有node.js处理
④、forever或node-cluster 实现灾难恢复
5、框架的选择
比较热门的:express 、koa、 hapi 以及express基础之上的sails
express:完善、稳定、文档全、社区大 (用的人比较多)
koa:超前、正在完善中
Hapi: 复杂,适合复杂的大型项目
二、安装
官网下载安装包: http://nodejs.cn/ 这个是中文网,里面还有中文文档供大家参考!
本人的安装环境:jdk1.7 + Windows 7 + node-v10.3.1-x64
自动配置了环境变量
测试安装的是否成功!!
cmd里面进行测试:
指令:npm
查看npm版本:npm -v
查看node.js 版本:node -v
node.js安装完成了!!
三、第一个简单的hello world
F:\node.js\study 这个是我创建的文件夹,大家可以随意创建,并且创建文本文档
右键Edit打开
另存为 n1_hello
输入 console.log("hello world");
在http上运行:
var http = require('http'); http.createServer(function (request, response) { response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'}); if(request.url!=="/favicon.ico"){ //清除第2此访问 console.log('访问'); response.write('hello,world'); //输出,但是没有执行完毕 response.end('hell,世界');//不写则没有http协议尾,但写了会产生两次访问 (输出,执行完毕了) } }).listen(8000); console.log('Server running at http://127.0.0.1:8000/');
在http://localhost:8000/ 打开
成功!!!
Ctrl C 结束