code

tcpdump 简介以作备忘

在深入理解计算机网络协议的过程中,一个趁手的工具少不了,很多人喜欢Wireshark,可视化界面做的比较好。然鹅,本人更加偏爱强大的tcpdump,不仅是因为其强大的功能,而且在实际应用场景中,我们不可能把所有的电脑都装好wireshark,然后再debug定位问题。 如果用macOS的话,内置的tcpdump命令十分方便快捷,当然,前提是你得记得住常用的命令。 这里重新捋一下tcpdump的使命及其基本使用方法,以作备忘。 常用Options -i any : Listen on all interfaces just to see if you’re seeing any traffic. -i

  • Aaron Thunder
    Aaron Thunder
4 min read
code

从零制作一个Node.js的Promise

Step 1 首先,什么是Promise? 在ES6 spec定义里面,Promise是一个类,其constructor接收一个executor函数。其实例都会有then方法。当然,在spec里面,Promises还有更详细的其他的属性,这里为了简单起见,暂且忽略不表。 首先,一个比较简陋的实现: class iPromise { constructor(executor) { } then(onFulfilled, onRejected) {} } Step 2 其次,Promise是一个有三种状态的状态机: pending: 初始状态,promises任务结果尚未确定 fulfilled: 任务成功,并产生了相关数据结果

  • Aaron Thunder
    Aaron Thunder
3 min read
code

modules in Node.js

模块机制是node js中很重要的一个基本概念。 在node js的模块系统中,每个文件都是一个独立的模块。 比如说在文件circle.js中: // circle.js const { PI } = Math; exports.area = (r) => PI * r ** 2; exports.circumference = (r) => 2 * PI * r; 其中exports是一个全局的对象,任何附加到exports上的属性都将被添加到该模块的根路径下。 在该模块中定义的变量被wrap在模块内部,比如这里定义的PI。 require.resolve() 当require一个文件时,

  • Aaron Thunder
    Aaron Thunder
3 min read
code

搬砖日常之——如何让git忽略文件权限更改?

当把别人的源代码pull到本地之后,我们可能会安装依赖,更改owner用户,然后将源代码或者编译输出的文件根据情况做一些权限变更。 在一顿操作猛如虎之后,你会发现,git将所有更改过权限的文件都标记了。 是不是一头雾水,一脸懵逼,脑瓜子嗡嗡地? 如果你胆子大的话,可以尝试一下直接commit上去,可能等会儿就会有不少人举着椅子来找你聊天了。 不挨打的办法很简单: git config core.fileMode false 这样git将会忽略文件权限的改动咯,又可以开心地在dev环境玩耍了。 作为一个好奇心重的搬砖工,这肯定满足不了我的求知欲啊,首先看一下文档是这么说的: core.fileMode Tells Git if the executable bit of

  • Aaron Thunder
    Aaron Thunder
3 min read
code

生产环境下用nginx为Nodejs server减压

生产环境下,nodejs server随时需要应对访问量的突然变化,以及各种网络攻击,特别是如果你的网站需要服务端渲染,哪怕前端已经部署了cdn、slb,高达百倍的输出输入比,都会让你的服务器被陡增的访问量轻松击溃。 面对如此恶略的网络环境,有什么办法能够让nodejs server更加健壮呢?方法当然有很多,这里我先介绍一款必备的基本款,包您满意。 本文关注的主要问题是如何有效降低nodejs server的访问流量,也就是尽量把流量拦截在抵达nodejs server之前。让nodejs server更少地直接暴露给充满恶意的网络世界。 架构是在nodejs进程(express)之前加一层nginx。这里nginx可以处理绝大多数脏活儿累活儿:文件压缩、serve静态文件、caching、SSL(可选,根据架构)、负载均衡以及其他让客户端开心的事儿。这样就可以避免对nodejs进程不必要的访问,

  • Aaron Thunder
    Aaron Thunder
4 min read