读书笔记之《深入浅出Node.js》(3)

原创 2016年05月31日 08:42:23

第六章 Buffer对象

Buffer对象的适用场景:处理网络协议、操作数据库、处理图片、接受上传文件,特别是在网络流和文件的操作中,要处理大量的二进制数据,所以需要用到Buffer对象,且Buffer对象占用的内存属于堆外内存,不是通过V8分配。
Buffer模块中与性能有关的部分是用C++写的,非性能相关的部分用JavaScript写,真正的内存是在Node的C++部分中申请的。
Buffer对象可以按照不同的编码方式转为字符串

"use strict";
var fs = require('fs');
var iconv = require('iconv-lite');
var reader = fs.createReadStream('../../public/test_buffer.txt');

var arrChunk = [];
//数组中存放了所以的Buffer对象,最后再一次性拼接
reader.on('data', function (chunk) {
  arrChunk.push(chunk);
});
reader.on('end', function () {
  var buf = Buffer.concat(arrChunk);
  var str = iconv.decode(buf, 'utf8');
  console.log(str);
});

字符串在网络中进行传输时,会被转换为Buffer,那样的话可以提前转为Buffer,这样能减少CPU的重复使用。

var http = require('http');
var hello = '';
for (var i = 0; i < 1000; i++) {
  hello += "JavaScript "
}

//预先将字符串转换为Buffer对象
hello = new Buffer(hello);

http.createServer(function (req, res) {
  res.writeHead(200);
  res.end(hello);
}).listen(8000);

第七章 网络编程

Node提供了net、dgram、http、https这四个模块,分别用于处于TCP、UDP、HTTP、HTTPS
这里我对WebSocket协议比较感兴趣,重点看了下WebSocket。

首先,WebSocket协议已经是HTML5标准的一部分了,相比较传统的HTTP协议,它的好处如下:

  • 客户端与服务器端只用一个TCP连接。
  • 服务器可以推送消息到客户端,客户端也可以推送消息到服务器端,更加灵活。(解决了轮询技术中服务器端没法主动请求客户端的缺陷)

具体的过程其实是要客户端在HTTP协议下和服务端完成一次特殊的握手
将HTTP升级为WebSocket
首先,Sec-WebSocket-Key 是一个Base64 encode的值,这个是浏览器随机生成的,主要的目的是验证服务器是否是真的支持WebSocket。然后,Sec_WebSocket-Protocol 是一个用户定义的字符串,用来区分同URL下,不同的服务所需要的协议。
接着服务器端需要对Sec-WebSocket-Key按照固定的算法进行加密后并返回,如下图所示:
服务器返回的消息
这就代表成功开启WebSocket协议啦~~
具体代码如下:

//后端我用的是Node.js,其他语言也有对应的框架支持WebSocket协议
var http = require('http');
var app = http.createServer(function (req, res) {
  res.writeHead(200);
  res.end("ok");
}).listen(8888);
//ws是一个实现了WebSocket协议的包
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({server: app});
wss.on('connection', function (ws) {
  ws.on('message', function (data, flags) {
    console.log(data);
    ws.send("Node.js");
  });
  ws.on('close', function () {
    console.log('stopping client');
  });
  ws.on('open', function () {
    ws.send("Node.js");
  });
});
//这里是客户端的代码
<script type="text/javascript">
  var ws = 'ws:127.0.0.1:8888'
  var webSocket = new WebSocket(ws);
  webSocket.onmessage = function (event) {
    console.log(event.data);
  }
  webSocket.onopen = function () {
    webSocket.send("Hello");
  }
</script>
版权声明:本文为博主原创文章,未经博主允许不得转载。

《深入浅出NodeJS》读书笔记

NodeJS NodeJS 4个特点: 异步I/O, 事件驱动与回调, 单线程事件轮询,跨平台。 NodeJS 5个大坑:异常处理,嵌套太深,没有Sleep,多线程编程,异步转同步。 NodeJ...
  • daviemeng
  • daviemeng
  • 2017年06月18日 11:01
  • 684

【深入浅出Node.js系列三】深入Node.js的模块机制

1 Node.js模块的实现 之前在网上查阅了许多介绍Node.js的文章,可惜对于Node.js的模块机制大都着墨不多。在后续介绍模块的使用之前,我认为有必要深入一下Node.js的模块机制。 ...
  • zhangyuan19880606
  • zhangyuan19880606
  • 2016年05月26日 16:50
  • 1138

《深入浅出node.js(朴灵)》【PDF】下载

《深入浅出node.js(朴灵)》【PDF】下载链接: https://u253469.pipipan.com/fs/253469-230062563     内容简介 《深入浅出Node.js》从...
  • zhiyong499
  • zhiyong499
  • 2017年12月04日 21:15
  • 208

【深入浅出Node.js系列九】一起撸Node.js

1 基本语法 Node.js 的基础是 JavaScript 这门 脚本语言。而大多数的脚本语言一个共同的特点就是“弱类型”。 不同于 PHP 的是,PHP 就是是有了新变量也无需申明,而...
  • zhangyuan19880606
  • zhangyuan19880606
  • 2016年05月27日 16:33
  • 1279

《深入浅出MyBatis--技术原理与实战》读书笔记

2017年11月30日       这本书目前为止我仔细看到了第6章,还有3章没有仔细看,这本书的确如作者所说,基于官方文档,因为我仔细读过mybatis的官方文档,基本和官方文档一致,不过官方文档有...
  • tnt87
  • tnt87
  • 2017年11月02日 22:51
  • 728

深入浅出数据分析读书笔记(head first into data analysis)

第一章  我要研究的对象是什么,分析的重点是什么,我要解决什么? 第二步:将主要的大问题分解为无数的小问题,当小问题解决了,大问题自然迎刃而解。 第三步:评估,将得到的数据拆分 对比 得出...
  • u012175010
  • u012175010
  • 2013年09月24日 15:06
  • 2129

《深入浅出MFC》学习笔记之一

-——《深入浅出MFC》学习笔记之一    http://www.gjwtech.com/vcandc/vc2shengruqianchumfc02.htm    ...
  • lxw907304340
  • lxw907304340
  • 2015年05月13日 15:40
  • 443

深入浅出MyBatis技术原理和实战(四)

映射器
  • humian151
  • humian151
  • 2017年03月15日 09:43
  • 134

深入浅出WPF-3

属性赋值通过Attribute=Value语法赋值时,由于XAML的语法限制,Value的值只能是一个字符串。这就引出两个问题: 如果一个类能使用XAML语言进行声明,并且允许它的Propetry与...
  • he_wen_jie
  • he_wen_jie
  • 2016年08月31日 15:33
  • 583

读书笔记之《深入浅出Node.js》(1)

碎碎念:距离上一次写博客已经过去了一个月,说好的半个月写一篇博客(自己打自己脸-。-)没有实现。其实主要这一个月都在看书,感觉没啥好写,但后来灵光一现,直接写读书笔记啊!把书上的一些知识点、重点用博客...
  • as645788
  • as645788
  • 2016年05月23日 20:53
  • 816
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:读书笔记之《深入浅出Node.js》(3)
举报原因:
原因补充:

(最多只允许输入30个字)