编程开发与计算机科学

如何使用 llhttp

llhttpNode.js v12 以上版本使用的 HTTP 解析器,代替了旧版的 http_parser。根据官方宣传,相较于旧版解析器,新版本解析器性能提升了 156%。llhttp 的主要代码由 Typescript 实现,描述了一个有限状态机,最终通过 llparse 将代码转换成 C 语言源代码。然而官方文档里根本没写如何生成 C 语言代码,只能自己探索了。

首先 clone 下 llhttp 的代码:

shellgit clone https://github.com/nodejs/llhttp

在项目根目录下能找到 Makefile 配置文件。打开看了下,并不是很复杂。这个 Makefile 配置仅支持 clang 编译器 和 Linux 操作系统。不过我们只需要生成 C 语言代码的部分就行了。

……

    Windows 下编译 libuv

    在 Windows 下编译 libuv 需要先安装 Visual C++ Build ToolsCMake

    在 libuv 源代码目录下运行命令:

    powershellmkdir build
    cd build
    cmake .. -DBUILD_TESTING=ON
    cd ..
    cmake --build --config Release build

    ……

      Python 库资源收集

      收集了流行的 Python 库和资源。会不定期更新

      Nim 语言的动态分发机制

      Nim 是一款 Python 风格的静态类型语言。但事实上,除了缩进语法外,Nim 和 Python 并没有太多相似之处。相对于 Python,Nim 更多地吸收了 Ada 和 Lisp 等语言的特性。

      Nim 编译器通过生成 C 或 Obj-C 中间代码的方式来进行本地编译,所以需要依赖一套外部编译器。Nim 也可以生成 Javascript 代码。此外,还有以脚本方式运行的 NimScript

      OOP 的一个特性就是支持多态,而动态分发(Dynamic Dispatch)就是实现多态的基础。在讲解 Nim 的动态分发实现前,先讲一下其他语言是如何实现的。

      ……

      创建支持 Kotlin 协程的 Vert.x 服务代理

      本文提供一个方法,可用于创建支持 Kotlin 协程的 Vert.x 服务代理

      Laravel 强制 api 路由组返回 JSON

      Laravel 的默认错误处理器通过 Illuminate\Http\RequestexpectsJson() 方法来决定是否将错误信息渲染成 JSON 格式输出。这要求将请求头的 Accept 字段设置为 application/json。本文提供一种方法,在尽可能减少代码的情况下,强制让 api 路由组中的所有错误响应变成 JSON 格式,而不依赖于请求的 Accept 头部

      使用 Cloudflare 的源站缓存控制

      Cloudflare 默认不缓存 HTML 页面,必须通过添加页面规则(Page Rule)来开启网页缓存。然而,免费用户每个站点最多只能添加三条规则。对于一个复杂的项目来说,三条规则是远远不够用的。通过设置源站缓存控制(Origin Cache Control),可以仅使用一条规则来启用全站缓存。

      ……

        使用 Google Authenticator(谷歌身份验证器)

        某些简单的业务场景需要一个管理后台,但是系统却没有复杂到需要引入一套用户体系。那么,谷歌身份验证器(Google Authenticator)可以作为管理后台的一种简单的身份认证方式。

        Google Authenticator 是一款基于时间(TOTP)与哈希(HOTP)的一次性密码算法的两步验证软件令牌。其原理是通过密钥与时间或者计数器序列计算出一个六到八位的一次性密码。

        其中 HOTP 算法需要服务端维护一个额外的计数器,需要客户端和服务端的计数器保持同步才能验证一致。而 TOTP 算法只要保证服务端和客户端的时间同步即可验证一致(默认时间误差窗口是30秒)。

        ……

        Java 获取包中所有的类

        刚接触 Java,没想到连这种基础功能都需要自己实现,而且还如此复杂。虽然最后也完成了实现代码,不过最后还是使用了 org.reflections 第三方包。记录实现代码,万一以后用得到

        Vert.x 项目自动重新部署

        Vert.x 是一款基于 JVM 的高性能异步框架。使用官网提供的项目生成器创建的 gradle 配置有一个 BUG,导致在 Windows 环境下无法完成自动部署。 修复方法如下