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

来源:互联网 发布:微商城开发费用 知乎 编辑:程序博客网 时间:2024/06/01 15:43

第六章 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>
0 0
原创粉丝点击