摘要:从sleep的实现说起 在nodejs中,如果要实现sleep的功能主要是通过“setTimeout + promise”实现,也可以通过“循环空转”来解决。前者是利用定时器实现任务的延迟执行,并通过promise链管理任务间的时序与依赖,本质上nodejs的执行线程并没有真正的sleep,事件循环 阅读全文
posted @ 2020-03-20 17:51 royalrover 阅读(1798) 评论(0) 推荐(4) 编辑
摘要:实现代理服务,最常见的便是代理服务器代理相应的协议体请求源站,并将响应从源站转发给客户端。而在本文的场景中,代理服务及源服务采用相同技术栈(Node.js),源服务是由代理服务fork出的业务服务(如下图),代理服务不仅负责请求反向代理及转发规则设定,同时也负责业务服务伸缩扩容、日志输出与相关资源监 阅读全文
posted @ 2020-03-10 18:16 royalrover 阅读(491) 评论(0) 推荐(0) 编辑
摘要:背景 目前微店中台团队为了满足公司大部分产品、运营以及部分后端开发人员的尝鲜和试错的需求,提供了一套基于图形化搭建的服务端接口交付方案,利用该方案及提供的系统可生成一副包含运行时环境定义可立即运行的工程代码,最后,通过 “某种serverless平台” 实现生成后代码的部署、CI、运行、反向代理、进 阅读全文
posted @ 2019-08-20 09:22 royalrover 阅读(622) 评论(0) 推荐(0) 编辑
摘要:本文是根据2019.4.13日参加 “Node Party”论坛使用的PPT,加上笔者新的思考与沉淀而来。在此再次感谢 贝贝网前端部门和芋头君以及相关与会人员的支持! —— 微店杨力(曾用名 欲休) 1. Node EE的前世今生 什么是 Node EE Node EE的诞生 Node EE范畴 总 阅读全文
posted @ 2019-05-09 10:51 royalrover 阅读(438) 评论(4) 推荐(1) 编辑
摘要:场景 实际业务中可能出现重复消费一个可读流的情况,比如在前置过滤器解析请求体,拿到body进行相关权限及身份认证;认证通过后框架或者后置过滤器再次解析请求体传递给业务上下文。因此,重复消费同一个流的需求并不奇葩,这类似于js上下文中通过 deep clone一个对象来操作这个对象副本,防止源数据被污 阅读全文
posted @ 2018-08-20 11:07 royalrover 阅读(953) 评论(0) 推荐(3) 编辑
摘要:deno node.js之父Ryan Dahl在一个月前发起了名为deno的项目,项目的初衷是 打造一个基于v8引擎的安全的TypeScript运行时 ,同时实现HTML5的基础API。所谓的安全运行时,是将TS代码运行在一个沙盒里,访问受限的文件系统、网络功能,这比较类似于web里的ifram 阅读全文
posted @ 2018-06-30 14:06 royalrover 阅读(8940) 评论(6) 推荐(4) 编辑
摘要:ThreadLocal变量的说法来自于Java,这是在多线程模型下出现并发问题的一种解决方案。 ThreadLocal变量作为线程内的局部变量,在多线程下可以保持独立,它存在于 线程的生命周期内,可以在线程运行阶段多个模块间共享数据。那么,ThreadLocal变量 又如何与node.js扯上关系呢 阅读全文
posted @ 2018-05-28 10:10 royalrover 阅读(878) 评论(2) 推荐(1) 编辑
摘要:由表及里 HTTP服务器用于响应来自客户端的请求,当客户端请求数逐渐增大时服务端的处理机制有多种,如tomcat的多线程、nginx的事件循环等。而对于node而言,由于其也采用事件循环和异步I/O机制,因此在高I/O并发的场景下性能非常好,但是由于单个node程序仅仅利用单核cpu,因此为了更 阅读全文
posted @ 2017-07-19 20:26 royalrover 阅读(3090) 评论(0) 推荐(5) 编辑
摘要:socket.io与cluster 在线上系统中,需要使用node的多进程模型,我们可以自己实现简易的基于cluster模式的socket分发模型,也可以使用比较稳定的pm2这样进程管理工具。在常规的http服务中,这套模式一切正常,可是一旦server中集成了socket.io服务就会导致ws通道 阅读全文
posted @ 2017-06-01 18:06 royalrover 阅读(8303) 评论(20) 推荐(6) 编辑
摘要:昨日17:58:00,笔者的爱女出生啦。小蛮,欢迎加入我们的团队! 阅读全文
posted @ 2020-09-24 11:41 royalrover 阅读(28) 评论(0) 推荐(0) 编辑
摘要:从sleep的实现说起 在nodejs中,如果要实现sleep的功能主要是通过“setTimeout + promise”实现,也可以通过“循环空转”来解决。前者是利用定时器实现任务的延迟执行,并通过promise链管理任务间的时序与依赖,本质上nodejs的执行线程并没有真正的sleep,事件循环 阅读全文
posted @ 2020-03-20 17:51 royalrover 阅读(1798) 评论(0) 推荐(4) 编辑
摘要:实现代理服务,最常见的便是代理服务器代理相应的协议体请求源站,并将响应从源站转发给客户端。而在本文的场景中,代理服务及源服务采用相同技术栈(Node.js),源服务是由代理服务fork出的业务服务(如下图),代理服务不仅负责请求反向代理及转发规则设定,同时也负责业务服务伸缩扩容、日志输出与相关资源监 阅读全文
posted @ 2020-03-10 18:16 royalrover 阅读(491) 评论(0) 推荐(0) 编辑
摘要:原因 子进程的stdout及stderr需要被设置为某个文件,根据文档 "setupMaster" 说明,需要设置stdio数组: c.setupMaster({ exec: , stdio: [0, 1, 2, 'ipc'] }) let c = require('cluster'); let f 阅读全文
posted @ 2019-12-11 17:27 royalrover 阅读(151) 评论(0) 推荐(0) 编辑
摘要:说明 nginx日志按天分片是运维的基本要求,不仅可以减小文件大小,方便检索关键数据,也可以定时删除过期的日志。可是nginx和tengine默认并不支持文件分片,因此需要额外处理。 另外,日志分片需要借助 ngx_http_log_module 模块,默认通过yum安装的nginx并不携带此模块, 阅读全文
posted @ 2019-10-12 15:47 royalrover 阅读(523) 评论(0) 推荐(0) 编辑
摘要:背景 目前微店中台团队为了满足公司大部分产品、运营以及部分后端开发人员的尝鲜和试错的需求,提供了一套基于图形化搭建的服务端接口交付方案,利用该方案及提供的系统可生成一副包含运行时环境定义可立即运行的工程代码,最后,通过 “某种serverless平台” 实现生成后代码的部署、CI、运行、反向代理、进 阅读全文
posted @ 2019-08-20 09:22 royalrover 阅读(622) 评论(0) 推荐(0) 编辑
摘要:远程调试 所谓远程调试,是指在本地IDE或命令行即时调试服务端代码,这在预发环境的测试阶段可以使用。远程调试避免了服务端环境的模拟,可快速定位bug。 node应用调试 本文的教程主要针对采用 VS Code IDE的群体。目前并未搭建一个系统专门支持node应用远程调试,因此需要开发人员手动去对应 阅读全文
posted @ 2019-05-15 18:28 royalrover 阅读(516) 评论(0) 推荐(0) 编辑
摘要:本文是根据2019.4.13日参加 “Node Party”论坛使用的PPT,加上笔者新的思考与沉淀而来。在此再次感谢 贝贝网前端部门和芋头君以及相关与会人员的支持! —— 微店杨力(曾用名 欲休) 1. Node EE的前世今生 什么是 Node EE Node EE的诞生 Node EE范畴 总 阅读全文
posted @ 2019-05-09 10:51 royalrover 阅读(438) 评论(4) 推荐(1) 编辑
摘要:Rockerjs Core "项目地址" "项目主页" 基于 TypeScript 和注解的轻量级IoC容器,提供了依赖注入、面向切面编程及异常处理等功能。Rockerjs Core可在任意工程中引入,是一个框架无关的IoC容器。 @rockerjs/core 模块不依赖于任何框架,并与现有框架、库 阅读全文
posted @ 2019-03-21 10:13 royalrover 阅读(485) 评论(0) 推荐(1) 编辑
摘要:一步步学会用docker部署应用 docker是一种虚拟化技术,可以在内核层隔离资源。因此对于上层应用而言,采用docker技术可以达到类似于虚拟机的沙盒环境。这大大简化了应用部署,让运维人员无需陷入无止境繁琐的依赖环境及系统配置中;另一方面,容器技术也可以充分利用硬件资源,做到资源共享。 本文将采 阅读全文
posted @ 2019-02-28 15:56 royalrover 阅读(13730) 评论(0) 推荐(8) 编辑
摘要:数据库与缓存双写问题 计算机领域任何一个问题都可以通过增加一个抽象“层”来解决。 业务中为了减少热点数据不必要的db查询,往往会增加一层缓存来解决I/O性能。可是I/O多了一层也就多了一层的更新维护与容错保障,当修改db中某些数据时,往往会面临缓存更新的问题,在这里简单介绍 数据库与缓存双写问题以及 阅读全文
posted @ 2018-12-17 08:09 royalrover 阅读(629) 评论(0) 推荐(0) 编辑
摘要:问题初现 某基于node.js开发的业务系统向外提供了一个dubbo服务,提供向第三方缓存查询、设置多项业务数据并聚合操作结果。在QPS达到800时(两台虚拟机,每台机器4Core8G4node进程),在监控平台上出现了非常多的slow rt警告,平均接口响应达到60+ms,请求报警率达到80%+。 阅读全文
posted @ 2018-10-30 09:49 royalrover 阅读(2288) 评论(1) 推荐(5) 编辑
摘要:整个九月份由于业务繁重以及玩心颇重,一直没有机会来写一篇博文。而且笔者于十月一日将会举办人生大事 婚礼,现在家里筹办过程中只能抽出零碎的时间来写这篇文章。 关于服务端截图,这种使用场景非常少见,大多服务器不同于PC机器并不提供相关图形界面以及图形库,所以对不同的系统的不同版本的服务器需要安装不 阅读全文
posted @ 2018-09-28 09:25 royalrover 阅读(2031) 评论(2) 推荐(1) 编辑
摘要:场景 实际业务中可能出现重复消费一个可读流的情况,比如在前置过滤器解析请求体,拿到body进行相关权限及身份认证;认证通过后框架或者后置过滤器再次解析请求体传递给业务上下文。因此,重复消费同一个流的需求并不奇葩,这类似于js上下文中通过 deep clone一个对象来操作这个对象副本,防止源数据被污 阅读全文
posted @ 2018-08-20 11:07 royalrover 阅读(953) 评论(0) 推荐(3) 编辑
摘要:背景 目前nodejs应用越来越广泛,但和java的dubbo体系接入困难,所以我们需要实现node端的dubbo provider逻辑。java的dubbo provider是和consumer在一个jar中,提供了服务配置、注册、集群与负载均衡、监控和多种协议。使用nodejs实现一个可用的du 阅读全文
posted @ 2018-07-30 16:37 royalrover 阅读(1906) 评论(0) 推荐(1) 编辑
摘要:deno node.js之父Ryan Dahl在一个月前发起了名为deno的项目,项目的初衷是 打造一个基于v8引擎的安全的TypeScript运行时 ,同时实现HTML5的基础API。所谓的安全运行时,是将TS代码运行在一个沙盒里,访问受限的文件系统、网络功能,这比较类似于web里的ifram 阅读全文
posted @ 2018-06-30 14:06 royalrover 阅读(8940) 评论(6) 推荐(4) 编辑
摘要:ThreadLocal变量的说法来自于Java,这是在多线程模型下出现并发问题的一种解决方案。 ThreadLocal变量作为线程内的局部变量,在多线程下可以保持独立,它存在于 线程的生命周期内,可以在线程运行阶段多个模块间共享数据。那么,ThreadLocal变量 又如何与node.js扯上关系呢 阅读全文
posted @ 2018-05-28 10:10 royalrover 阅读(878) 评论(2) 推荐(1) 编辑
摘要:TypeScript是什么 TypeScript是JavaScript的一个超集 TypeScript需要编译为JavaScript才能运行(语法糖) TypeScript提供了类型系统,规范类似Java TypeScript提供了ES6的支持,也可以支持部分ES7草案的特性,不用担心TypeScr 阅读全文
posted @ 2018-04-30 11:15 royalrover 阅读(906) 评论(0) 推荐(3) 编辑
摘要:BTC中的utxo模型 BTC中引入了许多创新的概念与技术, 区块链、PoW共识、RSA加密、萌芽阶段的智能合约 等名词是经常被圈内人所提及,诚然这些创新的实现使得BTC变成了一种有可靠性和安全性保证的封闭生态系统,但是在这个BTC生态中如果没有搭配区块链模式的转账模块,那么货币的流通属性 阅读全文
posted @ 2018-03-30 13:50 royalrover 阅读(1361) 评论(3) 推荐(8) 编辑
摘要:关于首屏 首屏时间是指从转向该页面到屏幕中该页面所有内容都可见时的时间。已经有太多的关于首屏时间的计算,在本文中并不重复阐述这些已经被提出或者实现的方案,而旨在探索与讨论更多的首屏自动化采集方案,扩大思考范围,你我思想之间互相碰撞往往可以激起更多的稀奇古怪的解决方案,这也正是我写这篇文章的目的。 阅读全文
posted @ 2018-01-27 17:49 royalrover 阅读(1356) 评论(1) 推荐(4) 编辑
摘要:关于工作 今年,我经历了人生准确意义上的跳槽。此前经历过2015年阿里宝宝的”拥抱变化“事故(虽然侥幸拿到了offer),因此面对跳槽或者异动已有了较强的抵抗和适应能力,所有5月底的离职对我负面影响其实并不大,更何况这是自我做出的并坚信可以把握住的一个追求更好发展的契机。 来到微店,我接触了不 阅读全文
posted @ 2017-12-31 20:58 royalrover 阅读(731) 评论(2) 推荐(2) 编辑
摘要:背景 terminal(命令行)作为本地IDE普遍拥有的功能,对项目的git操作以及文件操作有着非常强大的支持。对于WebIDE,在没有web伪终端的情况下,仅仅提供封装的命令行接口是完全不能满足开发者使用,因此为了更好的用户体验,web伪终端的开发也就提上日程。 关于终端(tty)与伪终端 阅读全文
posted @ 2017-11-29 10:39 royalrover 阅读(1462) 评论(1) 推荐(3) 编辑
摘要:服务端推 服务端推,指的是由服务器主动的向客户端发送消息(响应)。在应用层的HTTP协议实现中,“请求 响应”是一个round trip,它的起点来自客户端,因此在应用层之上无法实现简易的服务端推功能。当前解决服务端推送的方案有这几个: 1. 客户端长轮询 2. websocket双向连接 3. i 阅读全文
posted @ 2017-10-31 23:36 royalrover 阅读(13741) 评论(1) 推荐(7) 编辑
摘要:目标 当前页面需要与当前浏览器已打开的的某个tab页通信,完成某些交互。其中,与当前页面待通信的tab页可以是与当前页面同域(相同的协议、域名和端口),也可以是跨域的。 要实现这个特殊的功能,单单使用HTML5的相关特性是无法完成的,需要有更加巧妙的设计。 畅想 现在我们发现下思维,假设多种场景 阅读全文
posted @ 2017-09-17 12:18 royalrover 阅读(3974) 评论(5) 推荐(5) 编辑
摘要:由表及里 HTTP服务器用于响应来自客户端的请求,当客户端请求数逐渐增大时服务端的处理机制有多种,如tomcat的多线程、nginx的事件循环等。而对于node而言,由于其也采用事件循环和异步I/O机制,因此在高I/O并发的场景下性能非常好,但是由于单个node程序仅仅利用单核cpu,因此为了更 阅读全文
posted @ 2017-07-19 20:26 royalrover 阅读(3090) 评论(0) 推荐(5) 编辑
摘要:socket.io与cluster 在线上系统中,需要使用node的多进程模型,我们可以自己实现简易的基于cluster模式的socket分发模型,也可以使用比较稳定的pm2这样进程管理工具。在常规的http服务中,这套模式一切正常,可是一旦server中集成了socket.io服务就会导致ws通道 阅读全文
posted @ 2017-06-01 18:06 royalrover 阅读(8303) 评论(20) 推荐(6) 编辑
摘要:背景 在node工程部署中,常常涉及到三方:本地客户端、跳板机和服务器(集群)。在通过git触发gitlab hook脚本后,需要在跳板机中执行相应的ssh命令执行shell文件启动node服务器,这需要使用一个常用的命令 setsid ,这样当ssh命令执行完毕shell退出后,node服务器仍正 阅读全文
posted @ 2017-05-08 22:01 royalrover 阅读(1349) 评论(3) 推荐(2) 编辑
摘要:sptt sptt是移动端UI自动化测试的一种解决方案,全称为 special tool of test 。sptt提供了一套测试解决方案,并使用命令行完成相关操作,最终可集成在各种后续的流程中。 sptt内部整合了第三方测试框架 appium,由appium层抹平iOS和android环境下的测试 阅读全文
posted @ 2017-04-19 17:10 royalrover 阅读(667) 评论(0) 推荐(0) 编辑
摘要:Midlog中间件 node服务端开发中少不了日志打点,而在koa框架下的日志打点在多进程环境中日志信息往往无法对应上下文,而且在高并发下直接进行写buffer操作(内核调用writev)也会造成内存泄漏,因此Midlog就是为了缓解这种问题而产生的,其采用多种缓冲调度策略尽可能降低writev的代 阅读全文
posted @ 2017-04-06 16:53 royalrover 阅读(1022) 评论(0) 推荐(0) 编辑
摘要:本文翻译自 "CSS Ellipsis: How to Manage Multi Line Ellipsis in Pure CSS" ,文中某些部分有些许改动,并添加译者的一些感想,请各位读者谅解。 合理的截断多行文本是件不容易的事情,我们通常采用几种方法解决: 直接隐藏多余的文本 只适用于单行文 阅读全文
posted @ 2017-03-05 23:03 royalrover 阅读(1141) 评论(2) 推荐(4) 编辑
摘要:本片文章翻译自 "Styling Broken Images" 翻译过程中可能会在原意不变的基础上有些细微改动,望读者见谅 加载失败的图片是比较丑陋的,比如 但是我们可以让结果变得更美好。通过给元素设置CSS相关属性可以实现更美的呈现。 IMG元素你需要知道的两点知识 1. 我们可以针对IMG元素设 阅读全文
posted @ 2017-02-20 09:25 royalrover 阅读(5231) 评论(4) 推荐(13) 编辑
摘要:需求背景 目前node端的服务逐渐成熟,在不少公司内部也开始承担业务处理或者视图渲染工作。不同于个人开发的简单服务器,企业级的node服务要求更为苛刻: 高稳定性、高可靠性、鲁棒性以及直观的监控和报警 想象下一个存在安全隐患且没有监控预警系统的node服务在生产环境下运行的场景,当某个node实例挂 阅读全文
posted @ 2017-01-04 09:25 royalrover 阅读(2443) 评论(1) 推荐(4) 编辑
摘要:模块加载痛点 大家也或多或少的了解node模块的加载机制,最为粗浅的表述就是依次从当前目录向上级查询node_modules目录,若发现依赖则加载。但是随着应用规模的加大,目录层级越来越深,若是在某个模块中想要通过 require 方式以依赖名称或相对路径的方式引用其他模块就非常麻烦,影响开发效率和 阅读全文
posted @ 2016-11-17 16:38 royalrover 阅读(2707) 评论(0) 推荐(4) 编辑
摘要:管道 通过“child_process”模块fork出来的子进程都是返回一个ChildProcess对象实例,ChildProcess类比较特殊无法手动创建该对象实例,只能使用fork或者spawn,而且与process对象不同的是,ChildProcess实例的stdin为可写流,stdout和s 阅读全文
posted @ 2016-10-17 14:34 royalrover 阅读(2484) 评论(0) 推荐(1) 编辑
摘要:Transform流特性 在开发中直接接触Transform流的情况不是很多,往往是使用相对成熟的模块或者封装的API来完成流的处理,最为特殊的莫过于through2模块和gulp流操作。那么,Transform流到底有什么特点呢? 从名称上说,Transform意为 处理 ,类似于生产流水线上的每 阅读全文
posted @ 2016-09-26 09:10 royalrover 阅读(2429) 评论(0) 推荐(1) 编辑
摘要:移动端开发在某些场景中有着特殊需求,如为了提高用户体验和加快响应速度,常常在部分工程采用SPA架构。传统的单页应用基于url的hash值进行路由,这种实现不存在兼容性问题,但是缺点也有 针对不支持onhashchange属性的IE6 7需要设置定时器不断检查hash值改变,性能上并不是很友好。 而如 阅读全文
posted @ 2016-07-23 19:27 royalrover 阅读(19738) 评论(5) 推荐(13) 编辑
摘要:在node中,只要涉及到文件IO的场景一般都会涉及到一个类-Stream。Stream是对IO设备的抽象表示,其在JAVA中也有涉及,主要体现在四个类-InputStream、Reader、OutputStream、Writer,其中InputStream和OutputStream类针对字节数据进行 阅读全文
posted @ 2016-06-05 13:09 royalrover 阅读(5255) 评论(0) 推荐(7) 编辑
摘要:前端开发过程中会接触各种各样的编码,比较常见的主要是UTF-8和HTML实体编码,但是web前端的世界却不止这两种编码,而且编码的选择也会造成一定的问题,如前后端开发过程中不同编码的兼容、多字节编码可能会造成的XSS漏洞等。因此,本文旨在更好的全面了解涉及前端开发领域的字符编码,避免可能出现的交互和 阅读全文
posted @ 2016-05-07 16:58 royalrover 阅读(10809) 评论(2) 推荐(7) 编辑
摘要:XSS(Cross Site Scripting),又称跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行。在WEB前端应用日益发展的今天,XSS漏洞尤其容易被开发人员忽视,最终可能造成对个人信息的泄漏。如今,仍然没有统一的方式来检测XSS漏洞,但是对于前端开发人员而言,仍是可以在某些细微处避免 阅读全文
posted @ 2016-04-29 14:19 royalrover 阅读(16015) 评论(6) 推荐(8) 编辑
摘要:@(js) reduce函数 ,是ECMAScript5规范中出现的数组方法。在平时的工作中,相信大家使用的场景并不多,一般而言,可以通过reduce方法实现的逻辑都可以通过forEach方法来变相的实现,虽然不清楚浏览器的js引擎是如何在C++层面实现这两个方法,但是可以肯定的是reduce方法肯 阅读全文
posted @ 2016-03-01 11:21 royalrover 阅读(40628) 评论(3) 推荐(53) 编辑