目前的工作在搞 openresty / nginx 这块,产品稳定,需求也很小,都是改一些配置和 lua 脚本,空闲时候比较多。想系统的学习一下 openresty / nginx ,看了一些书、文章和视频。然后读源码,画流程图、活动图、状态图。于是产生了用 golang 把 nignx 重写一遍想法,主要用于学习。
![]() |
1
wonderfulcxm 2024-02-15 12:19:17 +08:00 via iPhone
厉害
|
![]() |
2
Yoruno 2024-02-15 12:21:37 +08:00 via Android ![]() 为什么不用 rust?
|
![]() |
3
wheeler 2024-02-15 12:24:12 +08:00 via iPhone
那是不是事件驱动都自己写啊
|
4
yumusb 2024-02-15 13:00:51 +08:00 ![]() 给你两个月的时间 抓紧时间发布 (doge)
|
5
0o0O0o0O0o 2024-02-15 13:10:54 +08:00 ![]() |
6
Albertcord 2024-02-15 13:17:01 +08:00 ![]() 期待,但这种底层好像用 rust 写更好?不是说 rust 是 C++的平替吗? nginx 就是用 c 写的吧
|
7
drymonfidelia 2024-02-15 14:29:08 +08:00 ![]() 目前的工作在搞 linux 这块,产品稳定,需求也很小,都是改一些配置和 bash 脚本,空闲时候比较多。想系统的学习一下 linux ,看了一些书、文章和视频。然后读源码,画流程图、活动图、状态图。于是产生了用 golang 把 lniux (
楼主的 nginx 也是拼错的)重写一遍想法,主要用于学习。 |
8
dorothyREN 2024-02-15 14:37:46 +08:00
golang 运行时,需要垃圾回收。不合适
|
![]() |
9
lesismal 2024-02-15 15:03:45 +08:00
基于 runtime 、标准库 Conn ,caddy 开销太大,根本干不过 nginx
不用 runtime 自己手撸 poller 性能也干不过 nginx 、但是好在 golang 方便开发 |
![]() |
10
lesismal 2024-02-15 15:04:45 +08:00
支持 OP 用 golang 搞搞看!
但这种基础设施,我也投 rust ! |
11
millet230413 OP @0o0O0o0O0o 我知道 caddy ,之前的公司用过这个,主要就是想通过这种方式来学习 nginx ,不然光看不做假把式。
|
12
millet230413 OP @Yoruno 没碰过 rust ,公司业务用 golang 这块做的,我之前做业务部分,后来调过来做网关相关的产品,同时不想把 golang 丢下,就想用 golang 来实现。
|
13
millet230413 OP @drymonfidelia
![]() |
14
millet230413 OP |
15
millet230413 OP 事件驱动肯定是用操作系统的
|
![]() |
16
Yoruno 2024-02-15 17:11:57 +08:00 via Android
@millet230413 我也是主 go ,最近再看 rust ,感觉 rust 特性太多了,长时间不用就忘记了
|
17
mokiki 2024-02-15 17:59:03 +08:00
learn golang the crazy away
|
18
dayeye2006199 2024-02-15 18:23:12 +08:00 via Android
不如看看 caddy
|
![]() |
19
lesismal 2024-02-15 18:32:29 +08:00
|
![]() |
20
chaleaochexist 2024-02-15 18:42:55 +08:00
开源吗? 地址?
|
21
realJamespond 2024-02-15 18:48:15 +08:00
nginx 最大特点就是自己搞了一套内存池吧,用 golang 和 rust 没必要搞这个了,其他都差不多都是调 epoll
|
22
chesha1 2024-02-15 19:43:57 +08:00
cloudflare 不是用 rust 重写了一个自己内部的 nginx 吗?这种需求用 rust 确实更好
|
![]() |
23
vincent7245 2024-02-15 19:55:00 +08:00
我也觉得 rust 更好,自从学会了 rust 我看到啥都想用 rust 重写一个
|
24
pastel 2024-02-15 21:51:56 +08:00
这个工程量是不是太大
|
![]() |
25
tool2d 2024-02-15 21:57:58 +08:00
我也写过类似的网站服务器,运行效率很低。
主要能学到一些知识,比如 SSL 详细的握手流程,加密流程,还有签名认证之类的。 |
26
YsHaNg 2024-02-15 22:59:35 +08:00
|
![]() |
27
YUX 2024-02-15 23:19:40 +08:00
看了楼上的发言,感觉又可以入门 rust 了
|
![]() |
28
HaroldFinchNYC 2024-02-16 01:38:20 +08:00
@tool2d 要是运行效率很高,你就可以卖钱了
|
![]() |
29
kkk9 2024-02-16 08:31:50 +08:00
😅 nginx 通过社区贡献已经基本优化到最佳了,除非是有特定需求,如 aws 网关、cf 节点内联,不然怎么样也不会超越 ngx 的
|
![]() |
30
kkk9 2024-02-16 08:34:48 +08:00
|
![]() |
31
gowk 2024-02-16 10:33:44 +08:00
可以参考下 C# 实现
https://github.com/microsoft/reverse-proxy |
32
millet230413 OP ![]() 呃,看了大家的回复,可能是误解了我的初衷,我并不是想要复制一个这样的产品(事实上已经有类似 nginx 这样优秀的网关产品了,比如上面大家说的 caddy ),我是想通过这种方式来学习 nginx ,学习里面的设计思想(这么优秀的产品肯定有很多很多值得学习的地方),学习处理请求的各个阶段和流程(把一个请求合理的划分成多个阶段,这种工程思维本身就有很多值得学习的地方),学习里面的网络知识(肯定有很多我未知的盲点在里面)。
|
![]() |
33
ingramyang 2024-02-16 18:11:48 +08:00
有那个时间还不如去看 caddy 的源码
|
34
wws2023 2024-02-16 19:31:53 +08:00 via Android
学着学着发现 nginx 很多功能都是加模块的
|
35
deorth 2024-02-17 10:37:00 +08:00 via Android
道理我都懂,可是为什么 nginx 不支持 abstract unix socket
|
36
julyclyde 2024-02-18 13:23:26 +08:00
我觉得你 *仅仅是* 想学 golang 而已
这事看起来和 nginx 没啥关系 |