红巢,底层与更新
随写
本来都不怎么想玩博客了,一般写了也没人看,但是今年秋招和面试官聊嗨了,想着也是,毕竟写了这么多项目,万一哪天人挂了,多可惜啊,那就继续玩博客吧。
红巢是纯C++写的,还是 FastCGI 模式,真难写,编译完作为HTTP服务器的一个二进制模块,调试也巨麻烦,呜呜呜,太难了。
如果这都不算真爱
写红巢都相当于手撕 PHP + Spring 了还是 C/C++ 版的,核心基本上只能使用 STL 和 C标准库 以及操作系统API,强行在这手撕全部轮子了,为了写红巢,其实是我高中、大一、大二就开始搞了,首先实现各种容器HashMap、TreeMap这些然后实现各种解释器和工具库,JSON库、File库、模板渲染库这些,然后还要大致复现几个加密库、Hash类操作这些,最后还要复现网络库、Spring 和 简单常用的PHP操作,虽然这些轮子写完能复用,但相对于实际写了1.5年多,也不知道图啥,估计全人类也没几个我这种神经病,硬要全部大致手撕一遍。
搞半天国内还是 Java 工资高,我不理解为什么最后给我开,同样差不多的后端岗位,Java工资比 C++\高,Java后端和C++后端显然不是一个难度啊,算了,曲高和寡,我是傻逼,小丑一个。
Almond解释器我都把快把70% C语言实现了,手撕小PHP了亲~,哎,用纯C++写红巢这种分布式博客是真的麻烦。Ngnix 和 Apache 是独立进程,FastCGI Host 还必须走 CGI标准通道来模拟 Servlet,太麻烦了。更别提后面的模板库、AOP、IOC这些了,C++又没注解,这Controller 和 PHP 的魔法变量同时来写还是有点意思。
image.png
控制台运行FastCGI,运行来运行去就一个巨麻烦,还是图形界面方便,先C++写个图形界面控制台再说。
image.png
嘻嘻,太麻烦了,直接把SQL嵌入到代码里面,sprintf 不香嘛,偷懒万岁!完了我是傻逼,后悔了,忘了还有缓冲区攻击了,额,学PHP 给$_GET这类前置数据加安全处理吧。偷懒真的是越偷越多事情,呜呜呜。
image.png
PHP 的 $_GET、$_POST、$_FILES可不能少
image.png
唯一遗憾的只能用宏来当 Java的 IOC注解了,每个破类还要手动用宏注册到对象池里面,哈哈哈默认全是 @Scope, Request,这点爱死Go了,Go至少自带完整的反射系统,不过也是,用C/C++不就是找虐吗,这种编译期的操作没什么宏搞不定的,如果不行就多搞几个宏,哈哈哈。
有一说一,宏还真不是100%万能,比如这个获取类名,宏还就真不太方便,奇怪,有__FUNCTION__这个魔法变量,为毛就没 CLASS,其他语言都有类似办法啊,C++每次都要去构造函数里面,扔个注册用的宏。
太难改了
看着本科同学GIT项目的小星星这么多,继续玩开源,我也不知道怎么去开我的项目,能开源的项目多达30多万行,光一个C++/JAVA框架就可以开源成40多个工具库,应用的项目就更多,太杂了,难受,那就慢慢搞吧。。。
// 命苦,写应用的项目多接地气,我这种基建狂魔,这种框架、算法和底层项目看的人还少,命苦
第一首要任务就是更新这上古RedNest引擎,这玩意技术栈改了又改,后端从2012~2018年的PHP/Java改成原创C++,前端也是上古H4时代的UEditor编辑系统,技术栈基本上都原创的,一时间难以下咽,基础设施也没写完,还是微服务架构的,好家伙和香港服务器的RPC就是大麻烦(怎么还有RSS这玩意,这跨服务器还要写数据同步),解决这玩意还要生成XML,看我这不反手一个手动拼接XML字符串。
改Summer引擎
Summer本来是Java下我顺手重写的Spring框架,但看着C++这边没后端框架,作为忠实C++粉这不也给C++安排一个,由于之前长年用PHP,一时间C++版Summer, PHP味太浓了(后悔这个决定),于是走Spring老路,IoC和AOP安排一下,哎呦C++用宏实现注解太麻烦了,全部要用指针去绑定,算了抄Go的Gin吧,还要写路径控制树,给C++也安排一个@Controller和@RequestMapping注解,慢慢写吧,把IoC对象池搞定、控制器解析树搞定,后面就功德圆满了。
TODO::写完再续写 // C++是真的麻烦,同样一个实现,在C++下要多掉好几根头发。。。
看我这不安排个手动XML字符串拼接
本来RedNest也是演示我C++项目的网站,之前Sitemap、RSS、Tags功能都没写,这批更新有时间也写一下算了。虽然我写了DOM解析库,妈的这RSS玩意不就是内容的XML树吗,又不用解析,那直接拼接了。
妈的又不是刷题,优化个JB,又不是不能用,哈哈!