老李手把手教你写山寨Workerman(一)

本文转载自公众号:高性能API社区

逮噶吼,唔系劳李。

真的是万万没想到,我竟然真的沦落到了用【XXX手把手教你XXX】当标题的一天...

先看一哈桑周投飘儿的结果撒,侬们先感受下撒:

swoole或者workerman相关内容 -- 62票 偏底层,主要是APUE、UNP方向 -- 45票 附近的人继续继续 -- 33票 高性能系列多写下...虽然类似于第二个选项 -- 47票 除了PHP,多写些其他的吧 -- 21票 老李你都个是老皮了,聊聊以后 -- 35票

其实第二项和第四项可以合并一下的,既然要扯【高性能】就不能避开APUE或UNP里的基础内容;不过让我出于预料的是最后一项,竟然超越了【附近的人】系列稳居中等...这让我稍微有点儿难堪;第一项预料之中...

所以就按照大家的意愿,开个新坑系列,在正式开坑前,你们看下下面这一段我的分析推理,是不是合情合理...

关于Swoole和Workerman,我打算先写点儿Workerman的事儿,WM结束后开始准备Swoole的内容 ---> 如果说要写点儿Workerman的事儿,你要说写WM能干啥用WM写个聊天室啊啥的,也挺没劲的,因为WM官网或者github上一大坨基于WM的项目 ---> 那写WM源码分析?别闹了,太枯燥了,干分析毛都分析不出来... ---> 思虑来思虑去,不妨和大家一起参考WM然后一起手拉手山寨一个Workerman...

为了防止上纲上线,我们先喊下口号:

据坊间传闻,Workerman是Walkor(李亮,我称亮哥)之前在腾讯工作时受到某佬启发后使用纯PHP打造的一款Socket服务器框架,我还听说韩老师当时也在腾讯,但是他走了使用C语言实现PHP扩展的路子来实现Socket服务器。这里我再贴一个之前Walkor在V2发的一个帖子,帖子主要内容是询问纯PHP实现Socket可行性的,这个帖子十分有意思,我贴出来你们感受下:

https://www.v2ex.com/t/170206

我们先从较高的角度去拆解下WM的构成,拆解完成后,我们按照模块去逐步实现就可以了,这就是从零做一件比较繁杂事情的顺序和方法,所以我想在此处占用本文三分之一的空间来讲个“小事情”。

你们还记得吗?那还是1999年,有关部门(实际上最初是以个人名义)从二毛那里买回了那艘建造度只有60%左右的瓦良格号,拖回来的路上经过博斯普鲁斯海峡,被土耳其以某个借口强行扣留在了土耳其港口,之后便是长达近两年的谈判,据说当时土耳其张口要价10亿美元后来有关部门经过谈判,使用其他条件避开了这10亿美元。所以前些年我听到大街上飘过了一句类似于【想带你去浪漫的土耳其】的歌词时,心中真是五味杂陈...了解下土耳其建国历史?扯远了...

接着说瓦良格。瓦良格实际上是苏联库兹涅佐夫号航母的姊妹舰,苏联分家后,库兹涅佐夫号归大毛,而瓦良格号归二毛所有,可惜二毛没有钱接着造完剩下的40%左右,所以他就一直停在港口等着发锈...当有关部门把瓦良格刚拖回来的时候,他是这个样子的:

说句实话,那年年轻无知的我还是讥笑过TA的,至于那种阴阳怪气的语气你们应该能想象的到的,和微信群里一些人的语调还是十分相似的。这么些年过去了,有关部门一直在忍受着这些无知的嘲讽和讥笑以及阴阳怪气,他们开启着写轮眼没日没夜地研究学习复刻这样一个庞大复杂的铁疙瘩,学习分析源码。

一个航母(后面是我瞎说胡说乱说的),从动力系统、航电系统、弹射系统、舰载机设计到各个模块的化学材料,几乎每一项都是要考验一个国家工业实力的。就举个简单的例子,前些年看到有媒体报道说共享单车浪费的钢铁能造多少航母,但凡xue微有点儿军备常识的腿子们都应该知道,航母上的钢可不是一般的钢,这种钢是考验一个国家钢铁工业实力的!十几年时间,有关部门就从零开始摸索航母上每个模块的设计与制造,这才有了今日我们看到的辽宁舰:

在将辽宁舰【源码】按照模块级研究透彻后,用了短短几年时间,我们就拥有了TA:

上面聊辽宁舰的事情,就是想给大家说明这些点:

聊聊如何从零开始折腾一个一大坨的项目,读源码拆分模块,分而治之,这才仅仅是第一步而已(研究WM) 如果你真的认为你掌握了TA,你还需要再写一个TA(山寨WM) 完成上面两点,需要相应的基础知识(国家基础工业能力) 有时候还是要忍受一些嘲讽和讥笑的

我在这里就简单将WM按照模块拆解一下,从后面开始,我们将按照模块去逐渐实现我们的山寨WM:

进程模型 IO模块 Event-Loop模块 协议模块

希望你能多多少少具备一些下面的知识点,后面写swoole相关内容会更加需要这些:

多进程多线程 进程间通信 信号 Socket TCP协议、UDP协议、HTTP协议

你们不是要底层、要APUE么?别给我整一出叶公好龙...