获得徽章 0
开源了一个轻量级跨平台的进程管理与监控服务,试着替代supervisor,支持Windows、macOS、Linux。提供HTTP API控制任务启动、停止、重启,以及一个尚未完成的web界面进行管理。
欢迎大家试用体验[奸笑]

项目地址:
github.com
展开
码哥比特于2023-11-12 21:02发布的图片
码哥比特于2023-11-12 21:02发布的图片
评论
大家好,近来用C语言从头写了一个HTTP服务器。
这个服务器有点类似于openresty和PHP的混合体,它的特性如下:
1. 使用脚本语言处理每个请求
2. 脚本解释器与HTTP收发(即HTTP服务器)处于同一个线程
3. 每个处理请求的脚本有完全隔离的运行环境
4. 当一个请求的处理不慎陷入死循环时,不会影响其他请求的处理,也不会影响新建TCP

不过因为时间比较短,因此也有一些限制和不完善的地方,例如:
1. 暂时只支持HTTP 1.x
2. 暂时只支持短链接
3. 暂不支持chunk mode

给出一个示例演示一下。
我们可以使用如下脚本处理请求:

#include "@/index.m"
str = Import('str');
sys = Import('sys');
uri = str.slice(Req.uri, '/');
uri && (ctlr = str.capitalize(uri[0]), o = $ctlr);
if (!o || sys.has(o, uri[1]) != 'method') {
Resp.code = 404;
} else {
o.__action__ = uri[1];
Resp.body = o.__action__();
Resp.headers['Content-Length'] = str.strlen(Resp.body);
}
上面这个脚本简单来说,就是实现了一个简单的控制器(MVC中的C)。

下面这段代码用来处理对应URI的请求。
Json = Import('json');
Index {
@index() {
Resp.headers['Content-Type'] = 'application/json';
return Json.encode(['code': 200, 'msg': 'OK']);
}
}

然后启动程序:
medge

最后使用curl测试一下:
$ curl -H "Host: test.com" http://127.0.0.1/index/index

{"code":200,"msg":"OK"}

项目的Github仓库:github.com

感谢大家!
展开
1
查问题5个小时,修复只要三十秒,求心里阴影面积…[吐血]
5
开源C语言库之模块选择性编译,只编译所需的,生成更精简的库,向支持单片机迈出了第一步
#每天一个知识点#
评论
开源C语言库Melon支持选择性编译啦,只编译所需组件,自动计算依赖模块,生成更小的库[得意]
doc.melonc.io

#每日快讯#
评论
简单易用的C语言JSON解析器[得意] #码上掘金#
评论
百变开源C语言日志模块[奸笑] #码上掘金#
评论
最好用的C语言JSON解析器 走过路过不要错过[耶] #码上掘金#
评论
挑战C语言JSON解析器易用性

只需两次函数调用即可完成任意JSON的编码
只需要两个函数即可完成解析JSON字符串并从中获取任意内容
这就是开源C语言库Melon提供的JSON解析器,可访问官方文档,查看JSON章节最后的示例,欢迎试用哟~
评论
【开源C语言库——应用篇|协程并发HTTP服务器实现-哔哩哔哩】 b23.tv

开源C语言库1300行实现 HTTP服务器,C语言管理I/O,分时调度协程处理请求。开发者不用考虑协程切换时机,也不会因脚本层死循环阻塞其他功能,欢迎来尝鲜呀[得意]
评论
【开源C语言库——快速实现新语言-哔哩哔哩】 b23.tv
快速实现一个属于你的语言[得意]

感兴趣的小伙伴,可以关注一下,还望能够给一个小星星支持一下呀

#每天一个知识点#
展开
1
下一页
个人成就
文章被点赞 14
文章被阅读 6,674
掘力值 490
收藏集
1
关注标签
25
加入于