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

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

  •  
  •   millet230413 · 279 天前 · 5911 次点击
    这是一个创建于 279 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    学习思路换一个,试着写一个 ngx 模块插件,或者 如 @tool2d #25 学习其他知识,@lesismal #19 手撸 epoll 学习。这样比较实际
    gowk
        31
    gowk  
       278 天前
    millet230413
        32
    millet230413  
    OP
       278 天前   ❤️ 1
    呃,看了大家的回复,可能是误解了我的初衷,我并不是想要复制一个这样的产品(事实上已经有类似 nginx 这样优秀的网关产品了,比如上面大家说的 caddy ),我是想通过这种方式来学习 nginx ,学习里面的设计思想(这么优秀的产品肯定有很多很多值得学习的地方),学习处理请求的各个阶段和流程(把一个请求合理的划分成多个阶段,这种工程思维本身就有很多值得学习的地方),学习里面的网络知识(肯定有很多我未知的盲点在里面)。
    ingramyang
        33
    ingramyang  
       278 天前
    有那个时间还不如去看 caddy 的源码
    wws2023
        34
    wws2023  
       278 天前 via Android
    学着学着发现 nginx 很多功能都是加模块的
    deorth
        35
    deorth  
       277 天前 via Android
    道理我都懂,可是为什么 nginx 不支持 abstract unix socket
    julyclyde
        36
    julyclyde  
       276 天前
    我觉得你 *仅仅是* 想学 golang 而已
    这事看起来和 nginx 没啥关系
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3175 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 13:41 · PVG 21:41 · LAX 05:41 · JFK 08:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.