
获得徽章 0
开源了一个轻量级跨平台的进程管理与监控服务,试着替代supervisor,支持Windows、macOS、Linux。提供HTTP API控制任务启动、停止、重启,以及一个尚未完成的web界面进行管理。
欢迎大家试用体验![[奸笑]](//lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_17.bcebf79.png)
项目地址:
github.com
欢迎大家试用体验
![[奸笑]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_17.bcebf79.png)
项目地址:
展开
评论
5
大家好,近来用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
感谢大家!
这个服务器有点类似于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仓库:
感谢大家!
展开
1
9
开源C语言库之模块选择性编译,只编译所需的,生成更精简的库,向支持单片机迈出了第一步
#每天一个知识点#
#每天一个知识点#
评论
2
评论
4
挑战C语言JSON解析器易用性
只需两次函数调用即可完成任意JSON的编码
只需要两个函数即可完成解析JSON字符串并从中获取任意内容
这就是开源C语言库Melon提供的JSON解析器,可访问官方文档,查看JSON章节最后的示例,欢迎试用哟~
只需两次函数调用即可完成任意JSON的编码
只需要两个函数即可完成解析JSON字符串并从中获取任意内容
这就是开源C语言库Melon提供的JSON解析器,可访问官方文档,查看JSON章节最后的示例,欢迎试用哟~
评论
点赞
【开源C语言库——应用篇|协程并发HTTP服务器实现-哔哩哔哩】
b23.tv
开源C语言库1300行实现 HTTP服务器,C语言管理I/O,分时调度协程处理请求。开发者不用考虑协程切换时机,也不会因脚本层死循环阻塞其他功能,欢迎来尝鲜呀
开源C语言库1300行实现 HTTP服务器,C语言管理I/O,分时调度协程处理请求。开发者不用考虑协程切换时机,也不会因脚本层死循环阻塞其他功能,欢迎来尝鲜呀
![[得意]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_52.cc6d6bc.png)
评论
点赞