V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
microxiaoxiao
V2EX  ›  程序员

闲来无聊,修改纯 C 实现一个 http server

  •  
  •   microxiaoxiao · 2022-06-04 15:37:58 +08:00 · 3756 次点击
    这是一个创建于 912 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/guocf20/android_httpd 效果如下:

    纯 C 实现,无依赖。主要针对原来的线程、进程问题修改,图片不支持,cgi 修改为 Lua 。不考虑并发处理。可以进一步处理用 android 来部署,应该功耗很低。^_^ 当然,用来学习 http 更合适。

    17 条回复    2022-06-06 11:36:59 +08:00
    duke807
        1
    duke807  
       2022-06-04 17:18:13 +08:00 via Android
    busybox 裏面的 httpd 你也可以提取出來用,記得也是一個 c 文件
    microxiaoxiao
        2
    microxiaoxiao  
    OP
       2022-06-04 17:23:41 +08:00
    @duke807 哦 真的呀,孤陋寡闻了。回头我去看看,非常感谢。
    Donahue
        3
    Donahue  
       2022-06-04 18:04:17 +08:00
    这题我会! 之前实现过类似的,但是比你的做的简单,只实现了 http GET, 和 http HEAD, 也是用多线程处理
    microxiaoxiao
        4
    microxiaoxiao  
    OP
       2022-06-04 18:08:35 +08:00
    @Donahue 不错,我看看能不能把它直接嵌入到 android 里面,把我的旧手机用来当一个服务器^_^.
    codehz
        5
    codehz  
       2022-06-05 11:53:40 +08:00
    (可以考虑顺带配一个 sqlite ,然后基本上就可以宣称功能完备了(
    microxiaoxiao
        6
    microxiaoxiao  
    OP
       2022-06-05 12:47:18 +08:00
    @codehz 大兄弟这个想法很好,我准备把 lua 嵌入进来。
    codehz
        7
    codehz  
       2022-06-05 15:06:40 +08:00
    其实我是看到这个项目才想起来的
    https://redbean.dev/
    (虽然它显然不能安卓上运行)可以考虑参考它的功能,除了 sqlite3 之外,还可以把 zip 带上,然后相关 api 可以参考它的
    microxiaoxiao
        8
    microxiaoxiao  
    OP
       2022-06-05 15:19:35 +08:00
    @codehz 这个不错呀,我还不确定把它搞成啥样,现在已经把 lua 修改了一波,把网络 socket 相关的嵌入进去了,这样的 lua 比较完整了,哈哈。
    Me7426
        9
    Me7426  
       2022-06-05 15:21:22 +08:00 via Android
    microxiaoxiao
        10
    microxiaoxiao  
    OP
       2022-06-05 15:35:32 +08:00
    @Me7426 只能膜拜了,我这个玩票性质。目标主要是独立不复杂,少依赖。
    vhus
        11
    vhus  
       2022-06-05 18:44:47 +08:00
    @Me7426
    这个 NB,会快到飞起吗?
    收藏了。
    microxiaoxiao
        12
    microxiaoxiao  
    OP
       2022-06-05 18:55:09 +08:00
    @vhus 没有哈,都没有 IO 复用,后面看情况要不要修改。
    vhus
        13
    vhus  
       2022-06-05 19:08:54 +08:00
    @microxiaoxiao
    无论怎样都要支持一下,收藏先。
    liyafe1997
        14
    liyafe1997  
       2022-06-05 20:47:36 +08:00 via Android
    既然纯 C ,是不是可以在 UEFI 下实现裸机 webserver ?直接调用 UEFI 的网卡驱动?
    microxiaoxiao
        15
    microxiaoxiao  
    OP
       2022-06-05 23:41:27 +08:00 via Android
    @liyafe1997 你这个目的和我不一样,你这个想法可以参考 IPMI 的界面,自己先实现一个小型 OS 比较现实
    LANB0
        16
    LANB0  
       2022-06-06 11:17:28 +08:00
    @liyafe1997 纯 C 也是会依赖各种系统调用和 glibc 的吧,裸机程序的实现可是会有大不同了
    microxiaoxiao
        17
    microxiaoxiao  
    OP
       2022-06-06 11:36:59 +08:00 via Android
    @LANB0 还好,基于系统,主要在手机上玩。你这基于固件的思路,也会依赖固件给你的接口,本身也是个软件接口。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2710 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:34 · PVG 23:34 · LAX 07:34 · JFK 10:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.