node.js学习日志

我的原创地址:https://thorthegod.github.io/

node.js的三个特点:

1.单线程:
在java,PHP或net等服务器端语言中会为每一个客户端链接创建见一个新的线程,每个线程耗费大约2mb内存——即8gb内存服务器可以同时连接最多4000个用户(故需要增加服务器数量)。

而node.js仅使用一个线程(不健壮,但约20mb)。当用户连接会触发内部事件,通过非阻塞和事件驱动机制让js宏观上并行。8gb内存——40000用户。当前请求(计算)暂停,其他请求放入事件站循环,当当前请求需要数据库时会被放入事件站中。

i/o读数据库,这个过程中node.js可以处理下一个请求,直到i/o返回值,继续进行前请求。
使操作系统完全不再有线程创建·销毁的事件开销。
能使cpu利用率百分之百。
一个用户线程的崩溃将导致所有用户线程崩溃。
2.非阻塞i/o:
传统的线程处理机制中,执行了i/o访问数据库代码后,整个线程都讲停下来等待数据库返回值,随后进行下一步代码。即这种机制下的i/o阻塞了程序的执行。而node.js在执行访问数据库时会立即执行后面的代码
如:
fs.readfile(“text1”,function(){

}
a++;
其中a++语句不会被访问数据库代码阻塞运行。
机制:线程的事件循环不断检查是否有未处理的事件并依次处理。完成事件的调动。
3.事件驱动:
客户端请求连接,提交数据等行为会触发相应的事件(node中同一时刻一个线程只能执行一个回调函数,中途可以处理其他事件——事件环)

*node适合有大量并发i/o但响应前不需要复杂计算的程序(擅长i/o即任务调动单不擅长计算)

node不适合需要极高可靠性的业务。(是一种小工具但不健壮)

我的第一次node代码

var http=require("http");
require表示引包,即引用自己的一个特殊功能

var server =  http.createServer(function(req,res){
创建服务器,参数为回调函数,表示若有请求则执行什么
res.writeHead(200,{"Content-type":"text/html;charset=UTF-8"});
设置http头部,状态码为200,文件类型为html,字符类型为utf-8
res.end("ancsjannaalscmafwrf" + (1+2+3) +"s");
});
server.listen(3000,"127.0.0.1");
运行服务器,监听3000端口

ctrl+c可以中断挂起服务器
终端输入cd:\xxx表示进入某个文件,dir显示文件中的子文件
tab自动补全

node.js没有根目录的概念——没有任何web容器,路由相关。
所以它很难提供静态服务。

查询字符串的模块:url和querystring

var http=require("http");
var url = require("url');
//url.parse()可以将一个完整的url地址分开为href协议,slashes斜杠,host主机名,端口号port,路径pathname,path(带上地址后的query),query(用户字符串)
var path = url.parse(req.url).pathname;
//路径
var query = url.parse(req.url).query;
//var query = url.parse(req.url,true).query;这里的true把长串转换成对象。即把查询遍为对象,直接打点来得到相应的参数。相当于querystring函数。
//var一个age =query.age再console.log便可以把query里的age提取并输出出来
//查询的东西
console.log(path);
console.log("query"+query);
querystring.parse('foo=bar&abc=xyz&abc=123')
//returns
{
foo: 'bar',
abc: ['xyz', '123']
}
// 假设存在 gbkDecodeURIComponent 函数。
//规定编码方式
querystring.parse('w=%D6%D0%CE%C4&foo=bar', null, null, { decodeURIComponent: gbkDecodeURIComponent });

运行流程:
写好html和node.js后,进入cmd,cd打开node.js代码所在的文件夹后,输入node xxx.js运行js文件,即可实现运行。

WebSocket协议允许了服务器主动发送信息给客户端。
用ws模块搭建websocket:

// 导入WebSocket模块:
const WebSocket = require('ws');

// 引用Server类:
const WebSocketServer = WebSocket.Server;

// 实例化:
const wss = new WebSocketServer({
    port: 3000
});
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值