• 请不要在回答技术问题时复制粘贴 AI 生成的内容
millet230413
V2EX  ›  程序员

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

  •  
  •   millet230413 · Feb 15, 2024 · 7820 views
    This topic created in 995 days ago, the information mentioned may be changed or developed.

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

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

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

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