⭐️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

2024-05-18

80% 时,开始拒收对端的消息(通过告警异常反馈)。此特性,直接由 socket.d 提供支持。好处是: 服务端不会 oom(服务端支持) 客户端也不会 oom(客户端支持) 示例: 启动服务端(中间件): java -Xmx256M -jar folkm

2022-07-15

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

2024-10-24

PU 进行推理,降低延迟,提高吞吐! * ⚙️ 接口调用,灵活多样:提供多种使用模型的接口,包括 OpenAI 兼容的 RESTful API(包括 Function Calling),RPC,命令行,web UI 等等。方便模型的管理与交互。 * 🌐 集群计算,分布协同:

2023-10-18

新 更新日志:http://furion.baiqian.ltd/docs/upgrade/ 新特性 [新增] 定时任务看板列表支持作业分组名排序 4.8.8.43 ⏱️2023.09.14 #I7YQ9V [新增] 验证特性 [DataValidation] 支持 [Display] 和 [DisplayName] 

2023-09-25

更新 更新日志:http://furion.baiqian.ltd/docs/upgrade 新特性 [新增] 定时任务看板列表支持作业分组名排序 4.8.8.43 ⏱️2023.09.14 #I7YQ9V [新增] 验证特性 [DataValidation] 支持 [Display] 和 [DisplayName]&nbs

2023-12-14

Salvo 是 Rust 实现的简单好用且功能强大的 Web 后端框架。 这是基于 Hyper 1.0-rc4 的最后一个版本,不久就会发布基于 Hyper 1.0 正式版本的下一个版本。 特色: - 有着比 axum 等更丰富的功能,但却更易于上手。 - 跟 go 等其他语言

2023-12-15

Salvo 是 Rust 实现的简单好用且功能强大的 Web 后端框架。 虽然昨天刚刚发布 0.61, 今天基于 Hyper 1.0 的全新版本就好了。 我们不跟 Axum 比爹爹,我们只跟它比功能,比易用性。 如果你不曾爱上用 Rust 开发 Web 后端,那只是你没有

2023-03-14

度系统,可从最小的应用程序到大型企业系统使用。 特性 简化调度作业 支持作业监视器 支持作业执行器 支持自定义作业存储组件(持久化) 支持自定义策略执行 内置周期、Cron 作业 支持自定义作业触发器

2024-08-02

器自动优化、大模型训推一体、大模型多硬件适配四大新特性。这些特性在飞桨框架2.6版本或更早版本时就已经开始开发,目前已达到外部可试用的阶段。这些新特性在使用体验、性能、二次开发便利度以及硬件适配能力等方面

2023-04-23

度系统,可从最小的应用程序到大型企业系统使用。 特性 简化调度作业 支持作业监视器 支持作业执行器 支持自定义作业存储组件(持久化) 支持自定义策略执行 内置周期、Cron 作业 支持自定义作业触发器

2023-04-08

3.2版本完整里程碑如下图所示,阅读本文档了解更多关键特性及能力。 图1 OpenHarmony 3.2社区版本里程碑    特性更新 ArkUI 组件及动画能力增强 支持XComponent控件,可用于EGL/OpenGL ES和媒体数据写入,并在XCompone

2023-04-11

Soul/Furion 文档:https://furion.baiqian.ltd/ 本期更新 新特性 [新增] 粘土对象可配置访问不存在 Key 时是抛异常还是返回 null 4.8.7.40 ⏱️2023.04.10 e994d53 [新增] 定时任务看板支持完全自定义 Reques

2022-08-20

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