使用 Node 原生方法处理 HTTP 请求

Photo by frdm . on Unsplash

koa 和 express 两种框架都对原生的 HTTP 进行了封装方便用户快速地开发 Web 应用。但是对于 HTTP 请求体的解析都没有提供内置的处理。

在 Node 中 HTTP 请求对象被分装成了一个流对象,因此需要使用读取流的方法去处理。当然,开源社区为这两种框架都提供了 body-parser 中间件,极大了简化了 HTTP 请求体解析的流程。但是 Node 原生方法是 body-parser 中间件的基础,让我们一起来探索吧。

继续阅读使用 Node 原生方法处理 HTTP 请求

VLAN INT VLAN 与 交换机与网关

交换机配置中 VLAN 和 INT VLAN 是两种完全不同的概念。

VLAN 是交换机用于隔离广播域、同时方便管理的一种方式内网划分技术。所谓虚拟,就是指网络管理员无需加上路由设备,就能在一个交换机上划分出多个网段,实现各个网段的隔离。不同 VLAN 间通信仍需通过三层(路由)。

INT VLAN 相当于虚拟的 VLAN 网关。一般可以通过 SHOW IP INT 来查看虚拟接口的 IP 地址(网关地址)。配置完成之后,我们可以在三层交换机上做一个路由(IP ROUTING),通过路由实现跨 VLAN 通信。

参考链接

“VLAN” Command vs “INT VLAN” Command

理解交换机与路由器工作方式(下)

Photo by Ehud Neuhaus on Unsplash

用语约定

路由表——路由器用来存放路由地址与对应接口的表。

路由器发出请求

承接上文。当路由器 Gig0/1 口得到交换机 A 发来的消息后,首先会确认消息中的目标 IP 是否在于路由表中,若存在,则将此消息交由对应的接口处理,否则就丢弃。本例中,此消息会继续交由 Gig0/2 接口处理。需要注意的是,IP 报文不需要修改,只需将数据帧上目的 MAC 地址修改成主机 B 的 MAC 地址。

查询 MAC 地址,没错,又是用到 ARP 。路由器会查询 ARP 表,若发现没有主机 B 的 MAC 地址信息,就会把这个消息丢弃,并向 Gig0/2 所在的局域网发起 ARP 请求广播,得到主机 MAC 地址之后会存放在本机的 ARP 表中。ARP 原理和前文一样,不再赘述。

继续阅读理解交换机与路由器工作方式(下)

理解交换机与路由器工作方式(上)

实验目的

本文中我要实验的是,当一根网线配置好 IP 后,接入交换机,然后 ping 另一个网段的主机后,数据报的流动方向以及各个设备在此过程中到底做了什么。

实验环境

Cisco Packet Tracer 是思科研发的一款网络实验模拟器。在这个软件中可以很轻松的观察数据包的流动、实验交换机和路由器的配置。

为了更好的研究数据在路由过程中做了什么,我做了一个简单的实验环境。其中包含两个网段共四台机器,两台交换机和一个路由器,并在 Tracer 中通过模拟方式来跟踪数据传递的过程。其示意图如下所示。

继续阅读理解交换机与路由器工作方式(上)

源码角度理解 Angular 变更检测

声明

本文作为 Angular 变更检测原理源码级的探索文章,涉及到了 View 、Zone.js 这两个重要问题。建议对此不熟悉的读者翻看我之前的两篇文章:Angular 中 View 的那些事儿Zone.js 入门

前言

Angular 作为一个 MVVM 框架,由 View Model 层与 View 层配合实现数据绑定。具体来说,在 Angular 中,NgZone(Zone.js 的封装)负责劫持了所有的 Web 事件和异步函数(比如定时器等),并在其回调函数执行完毕后通知 Angular 对 View 树进行变更检测操作。变更检测通过比对 View 中绑定数据在事件前后的变化,来决定是否需要通过操作 DOM 的方式来更改页面上的绑定数据。一个简单的流程如下图所示。在下一节,我会从源码角度分析变更检测的原理。

继续阅读源码角度理解 Angular 变更检测

Angular 中 View 的那些事儿

Photo by Toa Heftiba on Unsplash

声明

Angular 视图是个神奇的存在,因为在官方文档中你很难寻觅到 View 这的身影,但是阅读源码,你却会发现 View 是 Angular 中举足轻重的一个概念。本文通过 MVVM 概念入手,讲解 View 在 MVVM 中的作用,以及在源码级别,Angular 如何实现它。

MVVM 架构

Angular 作为一套 MVVM 框架,通过 View 层来实现页面元素与数据的绑定,并由 ViewModel 层自动将数据的变化反应到视图上。

其中 ViewModel 层是由变化检测机制与 View 层配合实现的。而 View 作为一个中间结构,通过关联页面元素与数据让 ViewModel 层在变更检测阶段,对页面上绑定的数据进行更新。

阅读更多