读书笔记之《深入浅出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协议下和服务端完成一次特殊的握手
首先,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
- 读书笔记之《深入浅出Node.js》(3)
- 读书笔记之《深入浅出Node.js》(1)
- 读书笔记之《深入浅出Node.js》(2)
- 读书笔记之《深入浅出Node.js》(4)
- 深入浅出Node.js读书笔记
- 《深入浅出Node.js》读书笔记+个人思考(一):模块机制
- 深入浅出Node.js
- 深入浅出Node.js
- 深入浅出Node.js
- 深入浅出Node.js
- <<深入浅出node.js>>
- 深入浅出Node.js(一)
- 深入浅出Node.js之CommonJS的模块规范
- Node.js读书笔记
- 读书笔记——深入浅出node.js——构建http服务
- 《深入浅出Node.js》读书笔记+个人思考(二):异步I/O
- 【深入浅出node.js】读书摘录3 - 异步I/O
- 读书笔记之-node入门
- 模拟登录学校教务网 获取课程表信息
- 求string字符串长度
- 自动化测试之uiautomator
- 查看文件大小命令
- Codeforces Round #351 (VK Cup 2016 Round 3, Div. 1 Edition) C E (斜率优化. 概率)
- 读书笔记之《深入浅出Node.js》(3)
- java 基于jxl解析xls以及解决丢失精度问题
- 2016SDAU课程练习三1013
- Easy-题目35:9. Palindrome Number
- Hibernate XX is not Mapped问题笔记
- .m 文件与.mm文件的区别
- Easy-题目36:112. Path Sum
- Android学习记录(十九)-简单的动画清除
- 反转链表17