
架构
xinyue_htx
自建博客https://xinyuehtx.github.io/
展开
-
从0开始实现redux中间件机制
今天和大家聊一聊redux的中间件原理。注:本文内容大部分参考redux的官网文档Middleware - Redux。如果英文好的同学可以直接阅读官网文档,写的非常好。关于redux-middlewareredux中间件提供了一个切面的关注点。我们可以很方便的利用中间件进行AOP编程,比如日志功能,埋点上报等。这里主要是利用装饰器模式,在实际任务执行之前,动态添加before和after的逻辑。这样就能形成一个洋葱模型接下来我们就看下如何手动开写一个日志中间件手动处理日志首先我们手动原创 2020-06-17 18:52:29 · 282 阅读 · 0 评论 -
如何设计一个远程桌面程序
今天和大家聊一聊如何实现一个远程桌面程序。关于远程桌面对于远程桌面程序,相信大家一定有所了解。常见的产品有TeamViewer,向日葵,微软远程桌面,QQ远程桌面等等。远程桌面能够在定位用户问题,协助操作,远程办公上有非常便捷作用。这里我们就来自己实现一个远程桌面程序。需求分析对于一个远程桌面程序,我们要解决的问题主要有三点:获取桌面流——没有桌面流,怎么做远程桌面传输数据——包括桌面流以及键盘鼠标等信息传输控制信息——建立连接,断开连接等这里需要注意的点是第二点传输数据。远原创 2020-06-16 14:30:09 · 4219 阅读 · 0 评论 -
理解NAT穿越
今天和大家聊一聊NAT穿越什么是NATNAT(Network Address Translation),即网络地址转换,是一种ip数据包的重写技术。为什么要要有NAT呢?这是因为现实中公网的ip地址过少,很多单位,学校都不能满足每个主机分配一个公网地址。因此会通过NAT技术将内网的主机地址映射为同一个公网地址的不同端口,进行外网访问。NAT的缺点NAT解决了内网环境下多主机上网的问题,但是也造成了难以从外网访问内网主机的问题。尤其是在一些p2p应用的场景下(比如现在越来越火的webrtc原创 2020-06-11 17:22:20 · 2672 阅读 · 2 评论 -
关于实时协同编辑的架构思考
今天和大家聊一聊协同编辑的架构设计。什么是协同编辑协同编辑是指多人同时对同一份文档进行编辑。例如我们熟悉的wiki,百度百科,以及办公产品腾讯文档,乃至我们的代码管理工具git,都可以算作是协同编辑产品。实时协同编辑随着大家在家办公,异地办公的情况普及,实时协同编辑工具也变得更加引人注目。实施协同编辑会面临几个问题:实时性——输入的数据可以及时被相关协作者看到一致性——各端看到和编辑的文档需要保持一致容错性——允许存在一定的网络波动,和数据丢失但是这三个问题会形成一个不可能三角即原创 2020-06-09 19:45:02 · 1206 阅读 · 0 评论 -
React-Router源码简析
今天来和大家解析下React-Router的源码。React-Router是React生态中最重要的组件之一。他提供了动态的前端路由功能,能让我们在前端应用实现,高效的SPA应用。那么这个东西是怎么实现的呢?我们来一起看下它的源码Router.jsconstructor(props) { super(props); this.state = { location: props.history.location }; // This is a bi原创 2020-05-16 19:30:29 · 454 阅读 · 0 评论 -
理解GraphQL
之前在restful理解_数据库_黄腾霄的博客-优快云博客和大家提及了RESTfulAPI的一个弊端,就是接口膨胀。也提到了一个解决方案——GraphQL今天就和大家讲一下什么是GraphQLRESTfulAPI的问题请求爆炸我们先假设有这样一个商城应用,后端对应着用户,订单,物流三个微服务,通过RESTfulAPI暴露服务。在客户端,我们需要完成查询指定用户的所有商品的物流信息。那么我们的请求行为应该是这样的。如上图所示,我们需要先通过用户ID获取从用户服务中获取订单信息,从其中抽取原创 2020-05-16 17:43:39 · 287 阅读 · 0 评论 -
HATEOAS简介
之前restful理解_数据库_黄腾霄的博客-优快云博客和大家介绍了对RESTful的理解。今天和大家介绍下RESTful中最重要的一个概念HATEOAS。什么是HATEOASHATEOAS是Hypermedia as the Engine of Application State的缩写。翻译过来就是超媒体即应用状态引擎。那这个是什么样的一个东西呢?我们先来看一个现实中的问题。问题来源我们在项目开发中经常需要涉及同后端对接API。对接的过程一般都是后端的同学给出一个文档,告诉我们有哪些A原创 2020-05-12 20:29:45 · 8012 阅读 · 0 评论 -
RESTfulAPI中能否使用query string
之前restful理解_数据库_黄腾霄的博客-优快云博客和大家介绍了对RESTful的理解。然后就有小伙伴问了我灵魂问题,对于RESTfulAPI设计,是不是不能使用query string?关于这个问题,网上观点两派纷争不断,为此我特意去拜读了Roy Thomas Fielding的博士论文,以及结合自己的理解来和大家谈谈RESTfulAPI能否使用query string。问题来源对于RESTfulAPI,大家都有一个基本的认识,网上一切皆资源,用URI来定位唯一的资源。而对于领域模型的实体原创 2020-05-11 22:00:46 · 1003 阅读 · 0 评论 -
repository模式
今天和大家介绍一下一种特殊的设计模式——仓库模式(repository pattern)什么是仓库模式(repository pattern)Martin Flower对此的定义是领域模型层和数据映射层中间的间接层。它封装了一系列数据库对象以及对应的操作。实现了领域模型和数据访问层的解耦。Repository 模式作用试想一下,在你的程序中,有多处地方需要查询,修改数据。你肯定不希望在各个地方重复书写数据访问代码,所以你会将其放置在同一处地方(数据访问层)。这在大部分场景下都能够满足要求。原创 2020-05-08 20:55:37 · 1924 阅读 · 0 评论 -
规约模式(specification)
今天和大家介绍一下一种特殊的设计模式——规约模式(Specification pattern)什么是规约模式(Specification pattern)假设你正在减肥,不能吃肉,也不能吃卡路里大于500的食物。把这种情况用编程来表示就会是下面这样void Eat(Food food){ if(food.HasMeat||food.Calorie>500) { ...原创 2020-05-07 21:03:48 · 1498 阅读 · 0 评论 -
restful理解
Restful已经是目前我们耳熟能详的概念了,但是找了下网上的文章,大部分都是介绍restful API范式。很少介绍resetful架构的。今天同大家介绍下对restful的理解。此外,阮一峰的文章也很不错,感兴趣的同学也可以参考。理解RESTful架构 - 阮一峰的网络日志什么是RESTfulRepresentational state transfer - Wikipedia中的解释是...原创 2020-05-06 20:43:11 · 552 阅读 · 0 评论 -
一文看懂CAP定理
今天和大家介绍下CAP定理。什么是CAP定理在了解什么是CAP定理之前,我们分别看下C,A,P是什么?一致性(Consistency):你对一个系统执行写操作后,紧接着的一次读操作能够获取正确的值。可用性(Avaliablity):在任意时刻对系统的请求都能得到及时响应分区容错性(Partition Tolerance):你的分布式系统允许任意节点之间的任意数量消息丢失。为了方便...原创 2020-03-15 16:53:54 · 576 阅读 · 0 评论 -
MVC、MVP、MVVM模式演变简析
今天和大家简单介绍下GUI设计中MVC、MVP 以及 MVVM 架构模式的演变。由于MVC等相关模式的定义,实现都各有不同,加之作者认识水平有限,如有纰漏或不足,万望指正。从GUI开始MVC、MVP 以及 MVVM都是GUI设计中的架构模式。那我们就先从GUI开始,思考下这些模式的本质目的。什么是GUI?wiki的定义是用于操作计算机的图形界面。或者使用英文单词(interface)...原创 2020-03-08 17:11:58 · 1639 阅读 · 1 评论 -
T型图介绍
在看到编译器相关知识时,发现有一个T型图的概念,于是就记录一下什么是T型图T型图是用于描述编译器实现时的一种辅助工具。我们都知道描述一个语言编译,需要源代码,编译器,和目标代码,三个组成部分。这三者都有自己的生成语言描述,正好可以使用一个T型图标识。这里下面的t型图表示使用β语言书写的编译器,将α语言写的源代码编译成为γ语言。T型图作用有了T型图我们就可以来描述编译器构建。比...原创 2020-03-04 20:23:55 · 26501 阅读 · 2 评论