如何用C++语言开发 tiny Nginx并真正锻炼C++的使用
1个回答
2016-03-27 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517198
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
Nginx是C语言写的,但这个不是改写为C++的关键,关键是C语言开发时面向过程的思想,C++开发是面向对象的思想,两者的差别还是很大的。通俗的讲,面向过程开发就是设计好“第一步干什么”、“第二步干什么”、“第三步干什么”。。。。。而面向对象的开发就是设计好有哪些对象,例如编码器、解码器、HTTP协议解析器,这些对象在不同的步骤中可能都有涉及。
以Nginx处理HTTP为例(样例,仅供参考,实际比这个复杂10倍不止):
C语言面向过程的处理方式:第一步:解析HTTP Method;第二步:解析HTTP Header;第三步:解析HTTP Body。。。。。。第X步:生成返回Header,第Y步:生成返回Body,第Z步:返回响应;
C++面向对象的处理方式:Method、Header、Body三个对象,但不要简单理解为一个步骤对应一个对象,而是一个对象可以在很多处理流程中出现。例如:Header对象可以用于第二步解析Header,也可以用于第X步生成具体的返回Header。
另外,Nginx的module设计,本质上其实就是面向对象的,一个module就是一个广义上的对象。
所以,如果你想用C++来改写Nginx,通过这个方式来实践面向对象编程的话,首先要对Nginx的实现原理和机制非常熟悉,然后才能从中提取面向对象相关的对象和类,最后用C++还是Java实现,差别都不会很大。自己改完之后,可以对照Netty的设计,看看你的设计和Netty差别在哪里。
作者:李运华
以Nginx处理HTTP为例(样例,仅供参考,实际比这个复杂10倍不止):
C语言面向过程的处理方式:第一步:解析HTTP Method;第二步:解析HTTP Header;第三步:解析HTTP Body。。。。。。第X步:生成返回Header,第Y步:生成返回Body,第Z步:返回响应;
C++面向对象的处理方式:Method、Header、Body三个对象,但不要简单理解为一个步骤对应一个对象,而是一个对象可以在很多处理流程中出现。例如:Header对象可以用于第二步解析Header,也可以用于第X步生成具体的返回Header。
另外,Nginx的module设计,本质上其实就是面向对象的,一个module就是一个广义上的对象。
所以,如果你想用C++来改写Nginx,通过这个方式来实践面向对象编程的话,首先要对Nginx的实现原理和机制非常熟悉,然后才能从中提取面向对象相关的对象和类,最后用C++还是Java实现,差别都不会很大。自己改完之后,可以对照Netty的设计,看看你的设计和Netty差别在哪里。
作者:李运华
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询