首页
学习
活动
专区
工具
TVP
发布

原创分享

专栏成员
363
文章
415610
阅读量
34
订阅数
Node.js HTTP 模块的内存泄露问题
很久没有逛社区了,晚上回来看了一下最近的情况,突然看到一个内存泄露问题,作为一个 APM 开发者,自然想分析其中的原因。
theanarkh
2023-09-02
2230
聊聊 JS 断点的实现
前言:断点的实现非常复杂,这里并不是说要长篇大论讲解 JS 断点在 V8 中是如何实现的,而是想从宏观上聊一下断点的实现。这个问题来源于最近和同事讨论的关于 V8 Inspector 实现的一些事情。
theanarkh
2022-12-06
1.1K0
利用多线程和 C++ 实现一个简单的 HTTP 服务器
前言:服务器是现代软件不可或缺的一部分,而服务器的技术也是非常复杂和有趣的方向。随着操作系统不断地发展,服务器的底层架构也在不断变化。本文介绍一种使用 C++ 和 多线程实现的简单 HTTP 服务器。
theanarkh
2022-12-06
1.6K0
如何优雅地 hack 用户的代码
前言:做基础技术的时候,会经常碰到一个问题就是如何让自己提供的代码对用户少侵入,无感。比如我提供了一个 SDK 收集 Node.js 进程的 HTTP 请求耗时,最简单的方式就是给用户提供一个 request 方法,然后让用户统一调用,这样我就可以在 request 里拿到这些数据。但是这种方式很多时候并不方便,这时候我们就需要去 hack Node.js 的 HTTP 模块或者给 Node.js 提 PR。在操作系统层面,有提供很多技术解决这种问题,比如 ebpf、uprobe、kprobe。但是应用层无法使用这种技术解决我们的问题,因为操作系统的这些技术针对的是底层的函数,比如我想知道一个 JS 函数的耗时,只能在 V8 层面或者 JS 层面去解决,V8 这方面似乎也没有提供很好能力,所以目前我们更多是考虑纯 JS 或者 Node.js 内核层面。本文介绍一些一种在 JS 层面 hack 用户代码的方式。
theanarkh
2022-07-01
6110
Node.js 的 perf_hooks
前言:perf_hooks 是 Node.js 中用于收集性能数据的模块,Node.js 本身基于 perf_hooks 提供了性能数据,同时也提供了机制给用户上报性能数据。文本介绍一下 perk_hooks。
theanarkh
2022-03-30
7070
No.js 支持 HTTP 模块
前言:No.js 初步支持了 HTTP 能力,目前只是支持解析 HTTP 请求,很多地方还需要慢慢琢磨,本文简单介绍其实现。
theanarkh
2021-10-11
1.5K0
Node.js HTTP 解析器 llhttp 的使用
前言:llhttp 是 Node.js 的 HTTP 1.1 解析器,用于替代早期的http_parser,性能上有了非常大的提升,最近打算在 No.js 里引入 llhttp 来处理 HTTP 协议的解析,本文简单介绍一下如何使用。
theanarkh
2021-10-11
1.1K0
No.js---基于V8和io_uring的JS运行时
前言:阅读Node.js的源码已经有一段时间了,最近也看了一下新的JS运行时Just的一些实现,就产生了自己写一个JS运行时的想法,虽然几个月前就基于V8写了一个简单的JS运行时,但功能比较简单,这次废弃了之前的代码,重新写了一遍,写这个JS运行时的目的最主要是为了学习,事实也证明,写一个JS运行时的确可以学到很多东西。本文介绍运行时No.js的一些设计和实现,取名No.js一来是受Node.js的影响,二来是为了说明不仅仅是JS,也就是利用V8拓展了JS的功能,同时,前端开发者要学习的知识也不仅仅是JS了。
theanarkh
2021-09-16
8610
web程序员
前言:同步一篇2017年1月在QQ空间写的随笔,2017年,我还在实习,现在回首,已经好几年过去,现在看起来,还挺有意思的。
theanarkh
2021-08-24
6280
线程源码分析之条件变量(基于linuxthreads2.0.1)
条件变量是线程间同步的一种机制,本文分析条件变量的实现和使用。我们先看一下条件变量的定义。
theanarkh
2021-05-28
9570
websocket库ws原理分析
ws服务器逻辑由websocket-server.js的WebSocketServer类实现。该类初始化了一些参数后就执行以下代码
theanarkh
2021-05-08
1.4K0
engine.io原理分析
当第一个参数是http.Server,即传入了一个http服务器的时候,engineio就会直接执行attach函数。否则返回一个新的Server对象,原理是类似的。通常我们会传入一个http server。所以我们从attach函数开始
theanarkh
2021-05-08
5370
nodejs源码分析之http Agent
Agent对TCP连接进行了池化管理。简单的情况下,客户端发送一个HTTP请求之前,首先建立一个TCP连接,收到响应后会立刻关闭TCP连接。但是我们知道TCP的三次握手是比较耗时的。所以如果我们能复用TCP连接,在一个TCP连接上发送多个HTTP请求和接收多个HTTP响应,那么在性能上面就会得到很大的提升。Agent的作用就是复用TCP连接。不过Agent的模式是在一个TCP连接上串行地发送请求和接收响应,不支持HTTP PipeLine模式。下面我们看一下Agent模块的具体实现。看它是如何实现TCP连接复用的。
theanarkh
2021-04-22
9420
【nodejs每日一讲】nodejs的进程间通信
之前提了一个问题:nodejs中如何实现兄弟进程间的通信,大家分别列举了redis、ZooKeeper,MessageChannel,还有linux操作系统提供的共享内存等一系列的进程间通信方式。所以今天来分享一下到底如何实现nodejs的进程间通信。这里的讨论只限于linux系统,本机的进程。情况分为两种:父子进程,兄弟进程。
theanarkh
2021-01-24
1.1K0
【nodejs每日一讲】使用nodejs写一个代理服务器
同样我们也可以写一个websocket服务器进行测试,写完后把浏览器的代理改成代理服务器的地址就可以了。
theanarkh
2021-01-12
3880
【nodejs每日一讲】http trick
我们知道http响应的时候一般会设置content-length告诉客户端,响应中响应体有多少个字节(如果有响应体的话)。但是很多时候我们在响应的时候,不知道有多少字节需要返回,但又希望不要拿到全部数据的时候才一起返回,而是部分返回,那么这时候我们就无法设置content-length了,那怎么办呢?http协议中有一个头可以支持这个功能。那就是Transfer-Encoding: chunked。chunked模式支持分块返回数据给客户端。但是不管是什么模式,无规矩不成方圆,http协议必须定义http解析器怎么判断响应结束了。下面我们看看chunk模式的时候,协议格式是怎样的。
theanarkh
2021-01-12
5030
格物致知-记一次nodejs源码分析的经历
昨天分析http模块相关的代码时,遇到了一个晦涩的逻辑,看了想,想了看还是没看懂。百度、谷歌了很多帖子也没看到合适的答案。突然看到一个题目有点相识的搜索结果,点进去是Stack Overflow上的帖子,但是已经404,最后还是通过快照功能成功看到内容。这个帖子[1]和我的疑惑不相关,但是突然给了我一些灵感。沿着这个灵感去看了代码,最后下载nodejs源码,加了一些log,编译了一夜(太久了,等不及编译完成,得睡觉了)。上午起来验证,终于揭开了疑惑。这个问题源于下面这段代码。
theanarkh
2020-11-26
4170
通过nodejs源码理解http connect的原理和实现
分析http connect实现之前我们首先看一下为什么需要http connect方法或者说他出现的背景。connect方法主要用于代理服务器的请求转发。我们看一下传统http服务器的工作原理。
theanarkh
2020-11-26
2.2K0
通过nodejs源码理解http pipeline的实现
http1.0的时候,不支持pipeline,客户端发送一个请求的时候,首先建立tcp连接,然后服务器返回一个响应,最后断开tcp连接,这种是最简单的实现方式,但是每次发送请求都需要走三次握手显然会带来一定的时间损耗,所以http1.1的时候,支持了pipeline。pipeline的意思就是可以在一个tcp连接上发送多个请求,这样服务器就可以同时处理多个请求,但是由于http1.1的限制,多个请求的响应需要按序返回。因为在http1.1中,没有标记请求和响应的对应关系。所以http客户端会假设第一个返回的响应是对应第一个请求的。如果乱序返回,就会导致问题。
theanarkh
2020-11-26
1.1K0
nodejs源码分析之connect
今天我们来分析connect函数。connect是发起tcp连接的api。本质上是对底层tcp协议connect函数的封装。我们看一下nodejs里做了什么事情。我们首先看一下connect函数的入口定义。
theanarkh
2020-07-27
7700
点击加载更多
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档