⭐️Archttp 1.0 新特性来了,简单、灵活、高并发,D 语言 Web 服务端框架!


昨天是 5.20 中国式情人节,今天是 5.21 我生日,做开源有十多年了,这也是给自己的一个生日礼物。

D语言在国内的环境来说一直热不起来,我和我的开源团队也做过很多开源的框架,全功能的,基本对标 springboot 和 springcloud 那种级别,但是新手用起来不够友好,由于D语言在国内的文档匮乏导致入门难,运行这么庞大的框架更是不可想象的难。

Archttp 版本发布前言

近几年 Golang 的发展很猛烈,比如使用 gin 框架就可以实现高并发能力的微服务应用,更是这几年的发展 NodeJS 写服务端的也是越来越多,尤其是 ExpressJS 这优秀的 API 设计让更多人在做服务端开发选型的时候选择了他们。

今天我们的主角 Archttp,首先来说 Archttp 拥有类似 ExpressJS 的 API 设计,让开发更轻量简单,其次拥有 Golang 级别的并发能力。

框架使用对比

我们先看一下 Archttp 最新版本中的基本使用用法和 Gin、Express 的差异。

DLang 的 Archttp 框架:

import archttp;

void main()
{
auto app = new Archttp;

app.get("/", (req, res) {
res.send("Hello, World!");
});

app.listen(8080);
}

Golang 的 Gin 框架:

package main

import (
"net/http"
"github.com/gin-gonic/gin"
)

func main() {

r := gin.Default()

r.GET("/", func(context *gin.Context) {
context.String(http.StatusOK, "Hello world!")
})

r.Run(":8081")
}

NodeJS 的 ExpressJS 框架:

var express = require('express');

var app = express();

app.get('/', function(req, res) {
 res.send("Hello world!");
});

app.listen(8082);

可以看出来这三个框架的使用都够简单,关于性能方面大家可以自己去做测试,作者目前只做了 Linux 平台下的性能测试,目前我的测试结果是 Archttp 最佳,系统是 Debian 11 虚拟机,欢迎大家一起来测试和反馈。

新版本特性:

  • 统一将方法名调整为小写字母驼峰命名
  • 优化 Router 流程和模块调整
  • 支持 response.sendFile(filepath, filename) 形式的下载
  • request 和 response 提供完整的 cookie 支持
  • app.use() 中间件功能可用
  • 现在可以通过 app.newRouter() 创建新的 Router 对象
  • 现在 app.use("/admin", Router) 可以进行子路由绑定,方便一个项目编写多个服务
  • 完善 HttpRequest 内置方法,接近 ExpressJS 的 API 使用
  • 完善 HttpResponse 内置方法,接近 ExpressJS 的 API 使用
  • 稳定性测试和修复

路由功能示例代码

import archttp;

void main()
{
auto app = new Archttp;

app.get("/", (req, res) {
res.send("Hello, World!");
});

app.get("/user/{id:\d+}", (req, res) {
res.send("User id: " ~ req.params["id"]);
});

app.get("/blog/{name}", (req, res) {
res.send("Username: " ~ req.params["name"]);
});

app.listen(8080);
}

可以看出 Archttp 的路由功能非常简单清晰,也支持正则匹配和取值。

中间件使用示例代码

import archttp;

import std.stdio : writeln;

void main()
{
auto app = new Archttp;

app.use((req, res, next) {
writeln("middleware 1 ..");
next();
});

app.use((req, res, next) {
writeln("middleware 2 ..");
next();
});

app.use((req, res, next) {
writeln("middleware 3 ..");
next();
});

app.use((req, es, next) {
writeln("middleware 4 ..");
});

app.use((req, res, next) {
writeln("middleware 5 ..");
});

app.get("/", (req, res) {
res.send("Hello, World!");
});

app.listen(8080);
}

这段代码运行之后可以发现没有执行到 middleware 5,现在 Archttp 的执行遵循洋葱规则。

Cookie 使用示例代码

import archttp;

import std.stdio : writeln;

void main()
{
auto app = new Archttp;

app.get("/", (request, response) {

writeln(request.cookie("token"));
writeln(request.cookies());

response.cookie("username", "myuser");
response.cookie("token", "0123456789");

response.send("Set cookies ..");
});

app.listen(8080);
}

下载文件示例代码

import archttp;

void main()
{
auto app = new Archttp;

app.get("/download", (req, res) {
res.sendFile("./attachments/avatar.jpg");
});

app.listen(8080);
}

路由绑定示例代码

import archttp;

void main()
{
auto app = new Archttp;

app.get("/", (req, res) {
res.send("Front page!");
});

auto adminRouter = Archttp.newRouter();

adminRouter.get("/", (req, res) {
res.send("Hello, Admin!");
});

adminRouter.get("/login", (req, res) {
res.send("Login page!");
});

app.use("/admin", adminRouter);

app.listen(8080);
}

可以看出 adminRouter 相当于一个路由组(路由组的概念来自于 Hunt Framework),路由组可以使用自己的中间件规则,也就是他相当于一个独立的子应用,可以独立控制权限等。

鸣谢

感谢我团队成员的支持,感谢所有支持我创建D语言中文社区的朋友们,感谢我D语言中文社区联合创始人张雪平老师和我一起打造D语言国内生态,感谢D语言国际社区的开发者们给我的支持,感谢开源PHP提供国内开源平台。

收尾

我们做D语言开源项目已经有 7 年了,也听到很多好的坏的声音,但是我们看到的是一个值得使用的 D语言,我们拥有15年以上的框架架构能力,也希望能够打造一个 DLang 生态中不可或缺的一个开源项目,协助 D语言中文社区生态的发展。

希望更多人参与到开源贡献中,希望开源PHP越办越好,希望码云越来越好尽快度过目前的难关!

QQ交流群

184183224


相关文章

2022-05-26

Archttp 是一个性能极高的 D语言 Web 服务框架,拥有 Golang Gin 的性能,拥有 ExpressJS 的易用性。Archttp 1.0.0 发布以后收到了一些测试反馈,根据反馈修复一系列问题,感谢反馈的小伙伴 ;) 主要更新: 增强路由配置兼容 Restful

2022-07-15

种方式的支付,以及扫码和付款码的聚合支付演示 增加简单支付收银台演示,演示单渠道支付 增加组合支付演示,演示多种支付方式组合进行支付 增加JacksonListTypeHandler MyBatis-Plus的类型处理器 优化系统中注入的Jackson

2022-08-20

dgeDB 的功能相当丰富,篇幅所限,这里简单介绍几个关键特性: 声明式建模 用写定义的方式建模所有的数据设计,包括计算属性、继承关系、函数定义、复杂约束和索引,以及访问规则。 type User { required property email -> str {

2022-06-22

Perl 开发的 Web 框架)。mojo.js 使用了所有最新的 JavaScript 特性,专为聚焦超媒体 (hypermedia) 的后端 Web 服务精心设计。 主要特性 实时 Web 框架,开发者可轻松地将单文件原型扩展为结构良好的 MVC Web 应用程序。 开箱即用的

2022-11-23

idator验证类、Log日志类 Config::load更改为深度合并 🍀 特性 1、PHP7.2+ 2、PSR-4标准自动加载 3、轻量级,扩展灵活,快速上手 4、支持服务容器,实现依赖注入、控制反转 5、支持单应用、多应用、多版本API 6、多环境

2022-04-02

ode 1.66 现已发布,该版本更新内容很多,下面摘录部分新特性作介绍: 本地历史记录 可以在时间轴视图中使用文件的本地历史记录,独立于源代码控制跟踪本地文件更改。根据配置的设置,每次保存编辑器时,都会在列表中添

2022-11-22

请求响应作为日志 新增支持命令行设置 Http header 一个简单的 http 并发测试工具。 仓库地址 如果喜欢就 star⭐️一下吧,让它沉睡在你的收藏库里。 github.com/leihenshang/http-little... gitee.com/leihenshang/http-little-... 介绍 灵感来源

2022-11-29

自己也造一个轮子吧。orz. 造轮子好玩吗? 真好玩! 特性 命令行中加入设置 header 头 命令行中加入设置 body 负载 完善一下 request.json 请求文件的逻辑 添加记录响应数据日志的功能,方便分析 新增 http agent 识别tag

2022-10-20

轻量任务单位。得益于良好的动态任务高密度混部和隔离特性、以及基于任务状态拷贝 API 带来的近乎 0 冷启动特性,可以实现任务的即用即启与即停即抛,进而无需关心在整个大集群中任务节点的编排问题。 与

2022-12-04

样。团队之所以称它为 2.0,是因为它有一些标志性的新特性,包括: TorchDynamo 可以从字节码分析生成 FX 图; AOTAutograd 可以以 ahead-of-time 的方式生成反向图; PrimTorch 引入了一个小型算子集,使后端更容易; TorchIndu

2022-08-11

意味着 API 已达到稳定状态,并可用于生产环境。部分新特性: 图像优化:引入新的<Image />和<Picture />组件 支持 MDX:在 Markdown 中混合编写 UI 组件的标准语法 支持 SSR:SSR 现已达到稳定状态,可用于生产环境 Vit

2022-09-24

的选择。在 HTAP 已经成为行业主流的今天,PingCAP 依旧以简单、实时的体验,持续引领 HTAP 风向。在七年的发展历程中,PingCAP 形成了一个助力客户成功的新范式,借助“自主开源 + 持续引领 + 面向未来”持续服务于客户成功。

2022-04-02

ode 1.66 现已发布,该版本更新内容很多,下面摘录部分新特性作介绍: 本地历史记录 可以在时间轴视图中使用文件的本地历史记录,独立于源代码控制跟踪本地文件更改。根据配置的设置,每次保存编辑器时,都会在列表中添

2022-11-14

ps://gitee.com/dotnetchina/Furion/issues/I5Y04N 2022.10.27 新特性 [新增] 日志模块时间格式化默认输出 毫秒 部分,针对并发比较高的场景 4.7.0 c0dc36c [新增] 写入数据库日志死循环输出检测机制 4.7.0 30dea0c