最开始谈NodeJS的时候写过一篇文章谈了它与Java各自的优缺点。NodeJS最早的定位是什么样的呢?...正是由于NodeJS的出现,使得类似React/Vue/Angular这类前端框架大放异彩,NodeJS是这些框架开发环境的基础。...那么了解了NodeJS内部执行逻辑以后,我们可以阅读下NodeJS源码,看看require语句究竟是如何进行操作的。...首先我们下载一份NodeJS源码,require语句源码位置: node\lib\internal\modules\cjs\loader.js 首先NodeJS有定义一个构造函数Module。...还记得文章开头我讲到的NodeJS文件查找有三种处理方式,内部定义的源码就在这里。
一.案例1 使用shell方式 #清理上一次版本,拉取新代码 rm -rf /server/admin-web cd /server git clone htt...
NodeJs 开发小记 有点明白为啥说有种思维方式是写作吧,就是明明想好好写突然不到如何写起,作为一个搞技术的,还是不废话,直接上内容吧 最近的区域链挺流行,带火了一波玩客猴系列的游戏,这下公司正好接了一个项目就是做一个类似的这个游戏...一个月的开发时间,前端采用h5实现,后端考虑到发送消息的缓存维护,php不好处理,最后采用nodeJs来实现后端的逻辑功能。...其实整个项目大体框架主要是公司另外一个人独立搭起来,之前也没有写过nodejs的,我就是后面加加业务代码,不过我有除了猫的基因遗传(说白了也就是位操作)没有看,其他基本都仔细看过来一便,毕竟是一个人搭建起来的...,项目代码不是很多,感觉直接看大牛这样的实现也能学习到搭建框架的基础知识,不像很多历史项目,代码巨多,核心流程的看来看去的。...,在新部署的时候 npm install –save 即可nodejs即可完成对库的安装 ├── res │ └── xlsx 放各种资源 比如策划表 ├── sys.js 内部跑的生产0代猫
下面我们开始分析源码。分析完,会对上面的代码有更多的理解。 首先我们从worker_threads模块开始分析。这是一个c++模块。我们看一下他导出的功能。...; env->SetMethod(target, "getEnvMessagePort", GetEnvMessagePort); /* 线程id,这个不是操作系统分配的那个,而是nodejs...)) .Check(); /* 是否是主线程,const { isMainThread } = require("worker_threads"); 这边变量在nodejs..._parent_port和child_port是给nodejs使用的,新申请的管道是给用户使用的。 3 创建子线程。 我们看创建线程的时候,做了什么。...总结,以上就是nodejs中关于线程的基本原理,线程的实现也非常复杂,大致了解他的原理,才能更好地使用他。
回首对nodejs的源码研究,时间已经过去了一年多。...这是我逐渐转向nodejs方向的原因之一。也是我开始研究nodejs源码的原因之一。因为nodejs满足了我喜好和技术上的需求。...阅读nodejs源码的方式是,选择一个模块,垂直地从js层分析到c++层,然后到libuv层。...所以我也一直在寻找志同道合的人一起分析,加快对nodejs源码的研究,不过真正能啃源码的人不多。源码的阅读可能并不一定能帮助你的工作变得更好,很多时候也往往不需要深入到这种程度。...阅读nodejs源码的初衷是让自己深入理解nodejs的原理,然后也会输出一些内容,希望让大家也能从中受益。这是不容易走的路,但是,正确的、喜欢的路,慢点、难点又有什么所谓呢。
function ImmediateList() { this.head = null; this.tail = null; } 从上面的代码中我们知道,调用setImmediate函数后,nodejs...] -= refCount; immediateInfo[kHasOutstanding] = 0; } setImmediateCallback函数来自timer_wrapper.cc,我们看到nodejs...\ } 然后就会执行刚才注册的CheckImmediate,一直执行到nodejs
从上面的代码可知,active一个定时器实际上是把新建的timeout对象挂载到一个哈希队列里。我们看一下这时候的内存视图。
可读流是对数据消费的抽象,nodejs中可读流有两种工作模式:流式和暂停式,流式就是有数据的时候就会触发回调,并且把数据传给回调,暂停式就是需要用户自己手动执行读取的操作。...我们通过源码去了解一下可读流实现的一些逻辑。因为实现的代码比较多,逻辑也比较绕,本文只分析一些主要的逻辑,有兴趣的可以参考文档或者自行深入看源码了解细节。...nodejs只是抽象了流的逻辑,具体的操作(比如可读流就是读取数据)是由用户自己实现的,因为读取操作是业务相关的。下面我们分析一下可读流的操作。...总结:本文就分析到这里,流的实现代码不算很难,但是非常绕,有兴趣的可以详细看源码,最后分享很久之前画的一个图(链接https://www.processon.com/view/link/5cc7e9e5e4b09eb4ac2e0688
我们看一下nodejs里做了什么事情。我们首先看一下connect函数的入口定义。..._onTimeout.bind(this), msecs); // 监听timeout事件,定时器超时时,底层会调用nodejs的回调,nodejs会调用用户的回调callback if...self.isPaused()) self.read(0); } } // 错误处理 } 连接成功后js层调用了self.read(0)注册等待可读事件(可参考之前的文章 记一次nodejs...更多阅读 1 记一次nodejs问题排查 2 nodejs源码分析之c++层的通用逻辑 3 libuv源码分析之stream第二篇 4 深入理解TCP/IP协议的实现之connect(基于linux1.2.13
"dependencies": { } } Electron-log(推荐) Electron-log日志记录工具 首先我们安装依赖: npm i electron-log --save 在项目里面引入依赖项...低版本的Electron可以使用以下方法: app.commandLine.appendSwitch('log-net-log', 'net-log'),net-log为文件名称,可以自定义,文件会保存在项目根目录下
将 a.html 请求地址改为 /api/b,那么发送请求的时候会自动补上主机和端口号http://localhost:3000
Null(env->isolate()), 1, &arg); if (ret.IsEmpty()) env->async_hooks()->clear_async_id_stack(); } nodejs
nodejs在初始化的时候,会在check阶段插入一个节点,并注册一个回调。
定时器在nodejs里的生产者是setTimeout和setInterval。...在nodejs中setImmediate的实现使用了idle这个阶段。...可能会引起nodejs的短暂阻塞。...nodejs中setImmediate是利用这个阶段实现的,具体可以看这篇文章nodejs之setImmediate源码分析。...这就是nodejs用libuv实现的事件循环。我们首先要了解各个阶段都是处理什么的,然后把我们的任务直接或者间接地加到对应阶段的任务队列里就可以了。
上篇文章讲到nodejs创建一个服务并且建立tcp连接的过程。接下来分析一下,在建立tcp连接后,nodejs是如何解析http协议的。...我们首先看一下nodejs在建立tcp连接时执行net.js层的回调时做了什么操作。下面是核心代码。...建立tcp连接后nodejs新建了一个Socket实体。我们看一下new Socket的核心逻辑。 stream.Duplex.call(this, options); this....我们再次回到nodejs的c++代码。看一下这两个函数做了什么。...nodejs收到数据后执行 parser.execute(d);execute函数对应的是node_http_parser里的Execute。该函数进行了重载。入口是下面这个函数。
这一篇我们来看看nodejs是如何实现定时器的。14.0.0的nodejs对定时器模块进行了重构,之前版本的实现是用一个map,以超时时间为键,每个键对应一个队列。即有同样超时时间的节点在同一个队列。...3 超时时间和链表的映射 1中已经提到,超时时间一样的节点,会排在同一个链表中个,nodejs中用一个map保存了超时时间到链表的映射关系。...了解完定时器整体的组织和基础数据结构,我们可以开始进入真正的源码分析了。 我们直接从setTimeout函数开始。...nodejs在初始化的时候通过一下代码对定时器进行了初始化工作。...现在我们知道了nodejs是如何设置超时的处理函数,也知道了什么时候会执行该回调。那我们就来看一下回调时具体处理逻辑。
nodejs支持了进程之后,又支持了线程。类似浏览器端的web worker。因为nodejs是单线程的,但是底层又实现了一个线程池,接着实现了进程,又实现了线程。...虽然底层只是对线程库的封装,但是把它和nodejs原本的架构结合起来似乎就变得麻烦起来。下面开始分析创建线程的过程。分析线程实现之前,我们先看一下线程通信的实现,因为线程实现中会用到。...nodejs中node_worker.cc实现了线程模块的功能。我们看一下这个模块的定义。...以上就是nodejs中线程的大致原理。
链表的实现比较简单,有几个模块使用了这个功能,定时器就是其中一个。 'use strict'; function init(list) { list._...
前几天有个同学和我说,他在看nodejs源码,但是不知道为什么需要看,也不知道从中可以学到什么。所以今天想聊一下关于阅读nodejs源码的意义。阅读其他源码也类似。...那么看nodejs源码的意义就很明显了。...假设你以后想在你的其他项目中单独使用v8,那么nodejs的代码就是一个参考。那么我们了解v8的使用有什么意义呢?这个问题相当于我们使用一个语言,然后了解他的编译器/解释器有什么意义。...总的来说,阅读nodejs源码最直接的是理解nodejs的工作原理和nodejs的本质。如果你是一个nodejs的开发者,这无疑是一个很好的收获。...从理论上聊了一下阅读nodejs源码的一些看法,下面顺便聊一下我自己的看法和体会。我阅读nodejs源码的原因是非常直接的,因为我希望我成为一个优秀的nodejs工程师。
FixedQueue是用来实现nextTick的。代码不多。 'use strict'; const { Array, } = primordials; ...
领取专属 10元无门槛券
手把手带您无忧上云