我想到了一个学习 nginx 的方式,嘿嘿嘿嘿 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
millet230413
V2EX    程序员

我想到了一个学习 nginx 的方式,嘿嘿嘿嘿

  •  
  •   millet230413 2024-02-15 12:14:01 +08:00 6616 次点击
    这是一个创建于 603 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前的工作在搞 openresty / nginx 这块,产品稳定,需求也很小,都是改一些配置和 lua 脚本,空闲时候比较多。想系统的学习一下 openresty / nginx ,看了一些书、文章和视频。然后读源码,画流程图、活动图、状态图。于是产生了用 golang 把 nignx 重写一遍想法,主要用于学习。

    36 条回复    2024-02-18 13:23:26 +08:00
    wonderfulcxm
        1
    wonderfulcxm  
       2024-02-15 12:19:17 +08:00 via iPhone
    厉害
    Yoruno
        2
    Yoruno  
       2024-02-15 12:21:37 +08:00 via Android   3
    为什么不用 rust?
    wheeler
        3
    wheeler  
       2024-02-15 12:24:12 +08:00 via iPhone
    那是不是事件驱动都自己写啊
    yumusb
        4
    yumusb  
       2024-02-15 13:00:51 +08:00   2
    给你两个月的时间 抓紧时间发布 (doge)
    0o0O0o0O0o
        5
    0o0O0o0O0o  
       2024-02-15 13:10:54 +08:00   3
    Albertcord
        6
    Albertcord  
       2024-02-15 13:17:01 +08:00   1
    期待,但这种底层好像用 rust 写更好?不是说 rust 是 C++的平替吗? nginx 就是用 c 写的吧
    drymonfidelia
        7
    drymonfidelia  
       2024-02-15 14:29:08 +08:00   11
    目前的工作在搞 linux 这块,产品稳定,需求也很小,都是改一些配置和 bash 脚本,空闲时候比较多。想系统的学习一下 linux ,看了一些书、文章和视频。然后读源码,画流程图、活动图、状态图。于是产生了用 golang 把 lniux (
    楼主的 nginx 也是拼错的)重写一遍想法,主要用于学习。
    dorothyREN
        8
    dorothyREN  
       2024-02-15 14:37:46 +08:00
    golang 运行时,需要垃圾回收。不合适
    lesismal
        9
    lesismal  
       2024-02-15 15:03:45 +08:00
    基于 runtime 、标准库 Conn ,caddy 开销太大,根本干不过 nginx
    不用 runtime 自己手撸 poller 性能也干不过 nginx 、但是好在 golang 方便开发
    lesismal
        10
    lesismal  
       2024-02-15 15:04:45 +08:00
    支持 OP 用 golang 搞搞看!
    但这种基础设施,我也投 rust !
    millet230413
        11
    millet230413  
    OP
       2024-02-15 16:22:10 +08:00
    @0o0O0o0O0o 我知道 caddy ,之前的公司用过这个,主要就是想通过这种方式来学习 nginx ,不然光看不做假把式。
    millet230413
        12
    millet230413  
    OP
       2024-02-15 16:23:19 +08:00
    @Yoruno 没碰过 rust ,公司业务用 golang 这块做的,我之前做业务部分,后来调过来做网关相关的产品,同时不想把 golang 丢下,就想用 golang 来实现。
    millet230413
        13
    millet230413  
    OP
       2024-02-15 16:26:32 +08:00
    @drymonfidelia 真大佬,我主要就是用这种方法来学习 nginx ,以及网关相关的知识。我想着能在写的过程中把相关的知识都摸一遍,这样以后产品出什么问题,能知道从哪里切入。
    millet230413
        14
    millet230413  
    OP
       2024-02-15 16:27:47 +08:00
    millet230413
        15
    millet230413  
    OP
       2024-02-15 16:31:04 +08:00
    事件驱动肯定是用操作系统的
    Yoruno
        16
    Yoruno  
       2024-02-15 17:11:57 +08:00 via Android
    @millet230413 我也是主 go ,最近再看 rust ,感觉 rust 特性太多了,长时间不用就忘记了
    mokiki
        17
    mokiki  
       2024-02-15 17:59:03 +08:00
    learn golang the crazy away
    dayeye2006199
        18
    dayeye2006199  
       2024-02-15 18:23:12 +08:00 via Android
    不如看看 caddy
    lesismal
        19
    lesismal  
       2024-02-15 18:32:29 +08:00
    @millet230413 #15
    如果要自己手撸 epoll ,可以试试我的:github.com/lesismal/nbio
    chaleaochexist
        20
    chaleaochexist  
       2024-02-15 18:42:55 +08:00
    开源吗? 地址?
    realJamespond
        21
    realJamespond  
       2024-02-15 18:48:15 +08:00
    nginx 最大特点就是自己搞了一套内存池吧,用 golang 和 rust 没必要搞这个了,其他都差不多都是调 epoll
    FlashEcho
        22
    FlashEcho  
       2024-02-15 19:43:57 +08:00
    cloudflare 不是用 rust 重写了一个自己内部的 nginx 吗?这种需求用 rust 确实更好
    vincent7245
        23
    vincent7245  
       2024-02-15 19:55:00 +08:00
    我也觉得 rust 更好,自从学会了 rust 我看到啥都想用 rust 重写一个
    pastel
        24
    pastel  
       2024-02-15 21:51:56 +08:00
    这个工程量是不是太大
    tool2d
        25
    tool2d  
       2024-02-15 21:57:58 +08:00
    我也写过类似的网站服务器,运行效率很低。

    主要能学到一些知识,比如 SSL 详细的握手流程,加密流程,还有签名认证之类的。
    YsHaNg
        26
    YsHaNg  
       2024-02-15 22:59:35 +08:00
    YUX
        27
    YUX  
    PRO
       2024-02-15 23:19:40 +08:00
    看了楼上的发言,感觉又可以入门 rust 了
    HaroldFinchNYC
        28
    HaroldFinchNYC  
       2024-02-16 01:38:20 +08:00
    @tool2d 要是运行效率很高,你就可以卖钱了
    kkk9
        29
    kkk9  
       2024-02-16 08:31:50 +08:00
    nginx 通过社区贡献已经基本优化到最佳了,除非是有特定需求,如 aws 网关、cf 节点内联,不然怎么样也不会超越 ngx 的
    kkk9
        30
    kkk9  
       2024-02-16 08:34:48 +08:00
    没打完又给回了……

    学习思路换一个,试着写一个 ngx 模块插件,或者 如 @tool2d #25 学习其他知识,@lesismal #19 手撸 epoll 学习。这样比较实际
    gowk
        31
    gowk  
       2024-02-16 10:33:44 +08:00
    millet230413
        32
    millet230413  
    OP
       2024-02-16 11:22:24 +08:00   1
    呃,看了大家的回复,可能是误解了我的初衷,我并不是想要复制一个这样的产品(事实上已经有类似 nginx 这样优秀的网关产品了,比如上面大家说的 caddy ),我是想通过这种方式来学习 nginx ,学习里面的设计思想(这么优秀的产品肯定有很多很多值得学习的地方),学习处理请求的各个阶段和流程(把一个请求合理的划分成多个阶段,这种工程思维本身就有很多值得学习的地方),学习里面的网络知识(肯定有很多我未知的盲点在里面)。
    ingramyang
        33
    ingramyang  
       2024-02-16 18:11:48 +08:00
    有那个时间还不如去看 caddy 的源码
    wws2023
        34
    wws2023  
       2024-02-16 19:31:53 +08:00 via Android
    学着学着发现 nginx 很多功能都是加模块的
    deorth
        35
    deorth  
       2024-02-17 10:37:00 +08:00 via Android
    道理我都懂,可是为什么 nginx 不支持 abstract unix socket
    julyclyde
        36
    julyclyde  
       2024-02-18 13:23:26 +08:00
    我觉得你 *仅仅是* 想学 golang 而已
    这事看起来和 nginx 没啥关系
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5749 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 90ms UTC 06:20 PVG 14:20 LAX 23:20 JFK 02:20
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86