读书笔记之《深入浅出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>
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

读书笔记——深入浅出node.js——构建http服务

朴灵大师的书确实不错,让我受益非浅。 个人理解,仅做参考。构建http服务在Web领域,大多编程语言需要专门的Web服务器作为容器,如ASP、ASP.NET需要IIS,PHP需要搭载Apache或Ng...

《深入浅出Node.js》读书笔记+个人思考(二):异步I/O

对异步的理解

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

第八章 构建Web应用在具体的业务中,我们有如下的这些需求(实际开发中一般用 Express框架,它帮我们做了很多事情),这里以访问 http://127.0.0.1/admin/head/on?so...

[读书笔记]深入浅出NodeJS——Node中的异步I/O

JS执行是单线程的,但Node底层有一个线程池,使用多线程来实现异步I/O Node的异步I/O 几大要素:事件循环、观察者、请求对象、I/O线程池。 事件循环 进程启动,会创建一个whil...

深入浅出Ext JS(第2版)读书笔记(1)

第1章 EXT概述 1.1  EXT版本变迁 q  EXT1.0 发布于2007年2月,这标志着EXT正式从YUI社区中独立出来,不再仅仅支持YUI,而是提供了ext-base、prototy...

JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记2

根据功能设计,可以先写好 HTML 结构基础,再配好 CSS 做出大致效果,最后用 JavaScript加上各种动作。首先请看 HTML 代码结构。
  • kgsew
  • kgsew
  • 2014-10-24 11:27
  • 1221

JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记4

只要图片高度不一致,通过这样的思路很快就可以看到一个“瀑布流”,这仅仅是静态的,一般滚动的时候瀑布流都会添加数据,所以接下来就是添加滚动事件,只要有滚动就计算然后补充数据。
  • kgsew
  • kgsew
  • 2014-11-10 11:45
  • 849

redis 学习记录总结(Node.js实战-读书笔记)

redis中的五种类型一年前已经对redis进行了学习,一直没有系统的记录总结,最近读过一本redis的书和Node.js 实战一书再次进行回顾和系统的总结来简要记录redis:全局操作: flas...

《Node.js开发指南》读书笔记

继续学学node.js。翻开书首先被惊到=。=:作者BYVoid是清华大学2010级本科……同样是2010级本科,我真是无语凝噎,大学浪费了好多时间。不过过去的已经过去了,接下来好好努力提高才好,加油...

了不起的Node.js读书笔记

了不起的Node.js读书笔记
  • hacke2
  • hacke2
  • 2014-10-02 18:18
  • 2412
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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