Node.js学习笔记-03

七、网络编程

1. 构建 TCP 服务

在这里插入图片描述
TCP 是面向连接的协议,显著特征 在传输之前需要3次握手形成会话。
客户端 ——请求连接——> 服务器端 ——响应——> 客户端 ——开始传输——> 服务器端。

2. 构建 UDP 服务

3. 构建 HTTP 服务

http模块

在node中HTTP服务继承自TCP服务器(net模块),它能够与多个客户端保持连接,由于其采用事件驱动的形式,并不为每一个连接创建额外的线程或进程,保持很低的内存占用,所以能实现高并发。
http模块请求流程

4. 构建 WebSocket 服务

WebSocket协议主要分为两个部分:握手 和 数据传输。
(握手部分由HTTP完成,握手顺利完成后当前连接将不再进行HTTP的交互,而是开始WebSocket的数据帧协议)

5. 网络服务与安全

Node在网络安全上提供了3个模块,分别为 crypto、tls、https。

TLS / SSL

1、密钥

TLS / SSL 是一对公钥/私钥 的结构,非对称结构。
客户端和服务端交换密钥
Node 在底层采用的是 openssl 实现TLS/SSL 。

2、数字证书

TLS 服务

HTTPS 服务

6. 总结

Node基于事件驱动和非阻塞设计,在分布式环境中尤其能发挥出它的特长,基于事件驱动可以实现与大量的客户端进行连接,非阻塞设计则让它可以更好地提升网络的响应吞吐。Node提供了相对底层的网络调用,以及基于事件的编接口,使得开发者在这些模块上十分轻松地构建网络应用。

八、构建web应用(重点)

8.1 基础功能

// 经典案例 Hello World
var http = require('http')
http.createServer( function (req , res){res.writeHead(200,{'Content-Type':'text/plain'});res.end('Hello World\n');
} ).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/')
// 使用 node .\helloWorld.js  运行服务,输入地址即可访问。

要实现更丰富的需求,一切都从如下这个函数展开:

function (req , res){res.writeHead(200,{'Content-Type':'text/plain'});res.end();
}

8.1.1 请求方法

在Web应用中最常见的请求方法是 GET 和 POST,除此之外,还有HEAD、DELETE、PUT、CONNECT等方法。
请求方法存在于报文的第一行的第一个单词,通常大写。如下为一个报文头的示例:
报文头为GET的示例

8.1.2 路径解析

路径部分存在于报文的第一行的第二部分,参考上图。

8.1.3 查询字符串

跟在路径后面的字符串就是查询字符串(如 ?name=nb)

Node提供了 querystring模块用于处理这部分数据:

var querystring = require('querystring');
var query = querystring.parse( url.parse(req.url).query ); 
// 更简介的方法是 给 url.parse()传递第二个参数,如下
var query2 = url.parse(req.url, true).query; 
// 它会将 name=nb&age=120 解析为一个JSON对象 {name:'nb',age:120}
// 如果键多次出现,那么它的值将会是一个数组 name=nb1&name=nb2 => {name:['nb1','nb2']}

8.1.4 Cookie

HTTP是一个无状态的协议,而现实业务中却是需要一定的状态的,否者无法区分用户之间的身份。如何标识和认证一个用户,最早的方案就是Cookie。

Cookie的处理分为如下几步:服务器向客户端发送Cookie => 浏览器将Cookie保存 => 之后每次请求都会将Cookie发向服务器;

HTTP_Parser 会将所有的报文字段解析到 req.headers上,那么 Cookie 就是 req.headers.cookie
根据规范中定义 Cookie 值的格式是 key=value;key2=value2 形式的。

8.1.5 Session

问题1:Cookie可能会体积过大;问题2:Cookie可以在前后端进行修改,Cookie对敏感数据的保护可以说是无效的。Session 应运而生。

Session的数据只保留在服务器端,客户端无法修改。这样数据安全性得到一定保障,数据也无需在协议中每次都被传递。

虽然在服务器端存储数据十分方便,如何将每个客户和服务器中的数据一一对应呢?这里有两种常见的实现方式:

  1. 基于 Cookie 来实现用户和数据的映射;P195
  2. 通过查询字符串来实现浏览器端和服务器端数据的对应;P195(风险大于1)
1.Session 与内存
  • Session 弊端:
  • 增加内存消耗,会引起性能问题;
  • 我们为了利用 多核CPU启动多个进程时,用户请求的连接将可能随意分配到各个进程中,Node的进程与进程之间是不能直接共享内存的,用户的Session可能会引起错乱。
  • 为解决性能问题和Session数据无法跨进程共享的问题,常用的方案是将Session集中化,如常用的工具 Redis、Memcached等。P198
  • 尽管采用第三方缓存会引起网络访问,理论上比本地慢,但还是利大于弊。
2.Session 与安全

主要是指如何让这个口令更加安全。

  1. 加密 / 解密
  2. 将客户端的某些独有信息与口令作为原始值然后签名。这样攻击者一旦不在原始的客户端上进行访问就会导致签名失败。

8.1.6 缓存

如何节省不必要的传输,提高性能。

8.1.7 Basic认证

P204 --不太重要

8.2 数据上传

8.3 路由解析

8.4 中间件

8.5 页面渲染

8.6 总结

  • 本章涉及的内容较为丰富,在Web应用的整个构建过程中,从处理请求到响应请求的整个过程都有原理性阐述,整理本章细节就可以完成一个功能完备的Web开发框架。过去的各种Web技术,随着框架和库的成型,开发者往往迷糊地知道应用框架和库,却不知道细节的实现,这好比没有地图却在野地里行进。本章的内容希望能为Node开发者带来地图似的启发,在开发Web应用时能够心有轮廓,明了细微。
  • 现在知名和成熟的Web框架有Connect、Express等,本章中的内容在这些框架中都有实现因为行文的原因,本章中的代码实现得较为粗糙,实际使用请使用这些成熟的框架。
    P245

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/35854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言可变数组 嵌套的可变数组,翻过了山跨过了河 又掉进了坑

可变数组 ​专栏内容: postgresql内核源码分析 手写数据库toadb 并发编程 个人主页:我的主页 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 概述 数组中元素是顺序存放,这一特性让我们…

Mysql 搭建MHA高可用架构,实现自动failover,完成主从切换

目录 自动failover MHA: MHA 服务 项目:搭建Mysql主从复制、MHA高可用架构 实验项目IP地址配置: MHA下载地址 项目步骤: 一、修改主机名 二、编写一键安装mha node脚本和一键安装mha mangaer脚本,并执行安装 …

你真的了解ORM吗?通过一个简单的例子来学习ORM

什么是ORM ORM(Object-Relational Mapping)是一种将面向对象程序数据模型与关系数据库之间进行映射的技术。 比如数据库表user,它有id、name、age字段映射到Java实体类就是User类,有id、name、age属性。 CREATE TABLE user (id…

2023国赛 高教社杯数学建模ABCDE题思路汇总分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

Design-Pattern设计模式

Design-Pattern设计模式 图说设计模式 图说设计模式 在线书籍 软件模式是将模式的一般概念应用于软件开发领域,即软件开发的 总体指导思路或参照样板。软件模式并非仅限于设计模式,还包括 架构模式、分析模式和过程模式等,实际上&#xff…

FFmpeg常见命令行(四):FFmpeg流媒体

前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》,结合我自己的工作学习经历,我准备写一个音视频系列blog。本文是音视频系…

UML 类图的画法

1.类图的画法 类 整体是个矩形,第一层类名,第二层属性,第三层方法。 :public- : private# : protected空格: 默认的default 对应的类写法。 public class Student {public String name;public Integer age;protected I…

【hello C++】特殊类设计

目录 一、设计一个类,不能被拷贝 二、设计一个类,只能在堆上创建对象 三、设计一个类,只能在栈上创建对象 四、请设计一个类,不能被继承 五、请设计一个类,只能创建一个对象(单例模式) C🌷 一、设计一个类&…

Sentinel使用实例

不说了,直接上官方文档 https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme-zh.md Sentinel Example 项目说明 本项目演示如何使用 Sentinel starter 完成 Spring Clo…

【金融量化】对企业进行估值的方法有哪些?

估值的方法有哪些? 如何对企业进行估值?有2个方法估算。 1 绝对估值法 它是一种定价模型,用于计算企业的内在价值。 比如说你可以根据公司近N年的现金流情况。借此去预测未来N年的现金流情况。所有的现金流数据都可以在年报上查询到。最后…

ios 知识

IOS 类文件.h和.m中interface的区别 大家都知道我们在创建类文件时会发现&#xff1a; #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend和 #import "ViewController.h"interface ViewController ()end那么他们之间有何区别呢&#x…

力扣:62. 不同路径(Python3)

题目&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&…

WebRTC音视频通话-WebRTC本地视频通话使用ossrs服务搭建

iOS开发-ossrs服务WebRTC本地视频通话服务搭建 之前开发中使用到了ossrs&#xff0c;这里记录一下ossrs支持的WebRTC本地服务搭建。 一、ossrs是什么&#xff1f; ossrs是什么呢&#xff1f; SRS(Simple Realtime Server)是一个简单高效的实时视频服务器&#xff0c;支持RTM…

STM32CubeIDE的安装和黑色主题及自动补全代码

STM32CubeIDE之前用过一点时间&#xff0c;但后来因为不习惯放弃了最近在新电脑上又用起来了&#xff0c;感觉相对之前好了很多&#xff0c;其实如果在工作中基本使用的是STM32,用意法的生态软件也挺好的&#xff0c;意法最近在这块也在大力发展&#xff0c;STM32CubeIDE安装包…

【Linux】云服务器自动化部署VuePress博客(Jenkins)

前言 博主此前是将博客部署在 Github Pages&#xff08;基于 Github Action&#xff09;和 Vercel 上的&#xff0c;但是这两种部署方式对于国内用户很不友好&#xff0c;访问速度堪忧。因此将博客迁移到自己的云服务器上&#xff0c;并且基于 Jenkins&#xff08;一款开源持续…

浪涌保护器中SPD防雷模块的主要应用方案

浪涌保护器&#xff08;Surge Protective Device&#xff0c;SPD&#xff09;是一种用于限制瞬态过电压和导引泄放电涌电流的非线性防护器件&#xff0c;用以保护耐压水平低的电器或电子系统免遭雷击及雷击电磁脉冲或操作过电压的损害。SPD可以将过电压泄放到地线或限制过电压到…

多元最短路(Floyd)

是一个基于动态规划的全源最短路算法。它可以高效地求出图上任意两点之间的最短路 时间复杂度 O(n^3) 状态转移方程 f[i][j]min(f[i][j],f[i][k]f[k][j]) 核心代码 void floyd(){for(int k1;k<n;k)for(int i1;i<n;i)for(int j1;j<n;j)s[i][j]min(s[i][j],s[i][k…

Vue前端 更具router.js 中的meta的roles实现路由卫士,实现权限判断。

参考了之篇文章 1、我在登陆时获取到登录用户的角色名roles&#xff0c;并存入sessionStorage中&#xff0c;具体是在login页面实现&#xff0c;还是在menu页面实现都可以。在menu页面实现&#xff0c;可以显得登陆快一些。 2、编写router.js&#xff0c;注意&#xff0c;一个…

Spring 事务详解

目录 一、概述二、事务的特性&#xff08;ACID&#xff09;三、Spring 的事务管理3.1 编程式事务管理3.2 编程式事务管理 四、Spring 事务管理接口及其定义的属性4.1 PlatformTransactionManager:事务管理接口4.2 TransactionDefinition:事务属性4.3 TransactionStatus:事务状态…

Stable Diffusion+Temporal-kit 半虚半实应用

1.先下载temporal-kit,重启webui 2.下载好ffmpeg,配置好环境,下载Ebsynth 3.准备好你需要的视频,拖到预处理视频位置 4.填写参数,点解保存设置,然后并点击生成,会生成到目标文件夹的input位置 5.然后拉出input文件夹里面你想切换成处理的帧图片,然后填写prompt查看效…