2k 行 c 代码实现简单 HTTP 服务器,性能炸天!

2018-02-08 11:48:51 +08:00
 whatanoob

好吧,首先感谢你点击进来,原谅我标题党了。 小弟花了一个多月的业余时间,手撸了一个 HTTP Server,epoll 结合非阻塞 IO,多进程复用端口,性能还不错,可以算作超级乞丐版 nginx 吧。当然还有很多功能没有实现,有些重要的 HTTP 头部还不支持,反向代理功能也有待实现:)。有文档有测试,地址在 https://github.com/chendotjs/lotos,欢迎 star 和 pr,希望大家不吝赐教!

8760 次点击
所在节点    分享创造
39 条回复
xwyam
2018-02-08 17:40:29 +08:00
已加星
whatanoob
2018-02-08 17:42:07 +08:00
@gleymonkey

#include <stdlib.h>
system("python2 -m SimpleHTTPServer");
but0n
2018-02-08 17:52:39 +08:00
https://github.com/t01y/J4F
之前尝试过... 后来放弃了 头有点冷
whatanoob
2018-02-08 18:17:49 +08:00
@misaka19000 《 c 专家编程》应该可以夯实 c 基础,读起来轻松愉快,《 UULP 》作为系统调用入门,之后看《 APUE 》和《 UNP 》这种大部头会轻松一些。酷壳的文章质量很高(手机没认证,发不了链接),干货满满。我的建议就是这样啦
whatanoob
2018-02-08 18:37:24 +08:00
@but0n 我之前也试过,现在头上已经凉透了😂
misaka19000
2018-02-08 20:12:42 +08:00
@whatanoob 蟹蟹
wellsc
2018-02-08 20:21:29 +08:00
@whatanoob #22 难道不是
``` c
#include <stdlib.h>
int main() { system("python -m SimpleHTTPServer"); return 0; }
```
blackjar
2018-02-08 21:55:54 +08:00
把 tinyhttpd 的线程模型改成 select/epoll 感觉可以在 600 行拿下
0ZXYDDu796nVCFxq
2018-02-08 22:01:05 +08:00
那个,我想说,nginx 调优一下,其实是远好于这个性能的……
pkookp8
2018-02-09 00:37:41 +08:00
棒!
另外有个 tiny,500 行
ytlm
2018-02-09 08:48:07 +08:00
挺好的,加油!
zjcqoo
2018-02-09 09:31:09 +08:00
过去在 windows 上用 C++ 撸过一个 IOCP 的 WebServer。不过隐藏的 BUG 一大堆,完全不敢开源出去。。。
dilu
2018-02-09 10:13:49 +08:00
C 语言写的性能再不强真的就可以考虑回家开个饭店了(不想开饭店的程序员不是好的架构) 手动滑稽
changwei
2018-02-09 11:04:08 +08:00
@dilu 你也别这样说。你去看看 nginx 的源码,注意看他判断 http 请求行的 method 用的是什么方法。

优化是无止境的,并不仅仅是语言本身。nginx 的源码在很多地方的优化达到了登峰造极的地步。比如说自己手动维护内存池分配,以及大量的宏和内联函数等等,非常适合想要学习开发高性能服务端的人去阅读。
dilu
2018-02-09 11:18:59 +08:00
@changwei 我不看我不看 又想骗我去学 C (手动滑稽)
whatanoob
2018-02-09 11:55:34 +08:00
@gstqc 这个是必然的哈,我这也就是搞出一个小 demo 抛砖引玉给大家看看玩玩。
whatanoob
2018-02-09 11:56:17 +08:00
@changwei 大神的 ID 很熟悉,记得是看大神的教程入门 vue 的,感谢~
Geo200
2018-02-09 15:11:19 +08:00
@pkookp8 求 tiny 的链接
pkookp8
2018-02-09 16:42:47 +08:00
@Geo200 没说全,tinyhttpd,百度都能轻易找到
另外可能你没兴趣,之前还看到过 uip 和 lwip 协议栈,也很精简

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/429413

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX